本文主要是介绍【RocketMQ每日一问】RocketMQ如何保证消息不丢失?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.生产端
- 不要使用oneway方式发送,因为这种方式不会有返回结果
- 设置重试次数
- 发送失败添加回调对消息进行处理
2.broker端
- 开启同步刷盘flushDiskType = SYNC_FLUSH ,这样在刷盘失败的时候会返回SendStatus.FLUSH_DISK_TIMEOUT
- 开启主从同步复制,brokerRole=SYNC_MASTER,这样在从写失败的情况下会返回SendStatus.FLUSH_SLAVE_TIMEOUT
## master 节点配置
flushDiskType = SYNC_FLUSH
brokerRole=SYNC_MASTER## slave 节点配置
brokerRole=slave
flushDiskType = SYNC_FLUSH
3.消费端
RocketMQ在消息消费时采用了ACK机制,即消息客户端从Broker拉取消息到消费端,只有消息消费端成功将消息消费,才会发送ACK到Broker,broker才会认为该消息消费成功,保证消息不丢失。而且消息在消费时,是采取最小位点提交机制 (会导致重复消费,所以同样要消费端幂等)
这篇关于【RocketMQ每日一问】RocketMQ如何保证消息不丢失?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!