亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

RabbitMQ的消息丟失解決方案

標簽:
Kubernetes

github上面的rabbitMq的测试代码:https://github.com/wuzhong290/rabbitmq.git

要想保住RabbitMQ消息不丢失,需要从下面几个方面进行完善。

一、消息持久化

要想做到消息持久化,必须满足以下三个条件,缺一不可。

1、Exchange 设置持久化:durable:true

new TopicExchange("amq.topic")创建的Exchange就是持久化的。

org.springframework.amqp.core.AbstractExchange构造方法如下:

webp

通过spring-rabbit创建Exchange

webp

通过RabbitMQ的web后台管理界面创建Exchange

2、Queue 设置持久化

new Queue(queueName)创建的Queue就是持久化的。

org.springframework.amqp.core.Queue构造方法如下:

webp

通过spring-rabbit创建Queue

webp

通过 RabbitMQ的web后台管理界面创建Queue

3、Message持久化发送

发送消息设置发送模式deliveryMode=2代表持久化消息

org.springframework.amqp.rabbit.core.RabbitTemplate默认情况下发送模式为deliveryMode=2

org.springframework.amqp.core.MessageProperties的默认发送模式:

webp

MessageProperties的默认发送模式

二、ACK确认机制

1、消息发送确认

ConfirmCallback  只确认消息是否正确到达 Exchange 中。

ReturnCallback   消息没有正确到达队列时触发回调,如果正确到达队列不执行。

github上面的代码:https://github.com/wuzhong290/rabbitmq.git

执行com.demo.message.TestReturnCallback方法testReturnCallback能够看效果。

webp

ReturnCallback 日志

2、消息接收确认

默认情况下消息消费者是自动 ack (确认)消息的,需要设置为手动确认,原因是:自动确认会在消息发送给消费者后立即确认,这样存在丢失消息的可能。

github上面的代码:https://github.com/wuzhong290/rabbitmq.git

执行com.demo.message.TestManualAcks方法testMQ能够看效果。

com.demo.message.example.NoticeHandlerACK演示了手动确认消费者的实现。

3、参考资料

参考

webp

webp

三、设置集群镜像模式

参考https://www.jianshu.com/p/dd706e9ee80d 文章中的《6、HA 镜像模式队列设置》

四、消息补偿机制

在消息发送、接受时记录DB日志,定时轮训DB日志,查明哪些发送消息没有成功消费,启动重新发送消息机制。



作者:静夜明灯
链接:https://www.jianshu.com/p/19e0927315da


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
移動開發工程師
手記
粉絲
46
獲贊與收藏
145

關注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消