Rabbitmq消息的可靠性投递2种解决方案

一.什么是生产端可靠性投递

  1. 保障消息的成功发出
  2. 保障MQ节点的成功接收
  3. 发送端收到MQ节点(Broker)确认应答
  4. 完善的消息进行补偿机制

二.生产端-可靠性投递-方案一

Rabbitmq消息的可靠性投递2种解决方案
第1步:将订单入库,创建一条MSG(状态为0) 入MSG DB库
第2步:将消息发出去
第3步:监听消息应答(来自Broker)
第4步:修改消息的状态为1(成功)
第5步:分布式定时任务抓取状态为0的消息
第6步:将状态为0的消息重发
第7步:如果尝试了3次(可按实际情况修改)以上则将状态置为2(消息投递失败状态)

三.生产端-可靠性投递-方案二

Rabbitmq消息的可靠性投递2种解决方案
第二种方案可以避免消息对象与业务对象同时入库

Upstream service:上游服务,可能为生产端
Downstream service:下游服务,可能为消费端
MQ Broker:可能为集群
Callback service:回调服务,监听confirm消息

第1步:首先业务数据落库,成功才后第一次消息发送(发送到queue1队列)
第2步:紧着着发送第2条消息(可以用于寻找第1条消息),用于延迟(时间晚与前面得到消息时间)消息投递检查(发送到queue2队列)
备注:第一步和第二部发送的消息是不同的队列(queue1,queue2),第一步和第三步监听是相同队列(queue1),第二部和第六步监听是相同的队列(queue2)
第3步:Broker端收到消息后,消费端进行消息处理
第4步:处理成功后,发送confirm消息
第5步:收到confirm消息后,将消息进行持久化存储
第6步:收到了delay消息,检查DB数据库,若对应的第1条消息已处理完成,则不做任何事情;若收到了delay消息,检查DB数据库,发现对应的第1条消息处理失败(或无记录),则发送重传命令到上游服务,循环第1步