0x20【RabbitMQ】如何保证消息100%投递成功?
1、什么是生产端的可靠性投递?
- 保证消息的成功发出
- 保障MQ节点的成功接收
- 发送端收到MQ节点(Broker)确认应答
- 完善的消息进行补偿机制
2、BAT/TMD互联网大厂的解决方案
- 方案一:消息落库,对消息状态进行打标
- 方案二:消息的延迟投递,做二次确认,回调检查
3、方案一架构图

==注意:实际应用中很少使用事务,一般都是使用补偿操作。==
- I/O操作太多,在高并发环境下不适合,应该减少IO操作
- 所以出现第二种方案
4、方案二架构图

- Step1注意:数据入库之后在进行消息发送
- 消息在消费成功后生成一条新的消息发送到Confirm队列,有一个单独的服务(Callback service)监测这个下游服务的处理结果,发现消息消费成功了,就进行持久化存储。
- 二次投递的队列和第一次投递的队列不是一个队列。Callback service监听这个队列,然后进行检查(数据库<—>消息),成功就什么都不做。失败的话返回一个重发命令,带有一些标志性ID,然后发送端去BIZ DB中查找该消息并重发。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果