可靠性投递

2021-02-07  本文已影响0人  simon_kin

消息落库重发

Step 1:业务数据和消息数据分别入库,标记消息发送中、记录消息超时时间
Step 2:发送消息
Step3、4:异步监听MQ应答;响应成功,则标记消息发送成功;失败则,标记消息发送失败。
Step5、6、7:取出未发送成功(status:0)且响应超时的消息,重新发送。若发送次数大于3,则标记位失败消息,通知人工处理。

mq1.png

延迟投递

Step1:先将业务数据入库(补偿备用),然后将消息发送到MQ
Step2:再发送一条延时消息,这里需要设置延时时间,比如5分钟后投递
Step3:消费者监听队列,收到消息并进行处理
Step4:处理完成之后发送一个Confirm消息到MQ中(这里的消息不是ACK)
Step5:CallBackService监听收到消费者的Confirm消息,对消息做持久化存储到MsgDB中
Step6:5分钟后CallBackService监听到延时消息后,去检查DB中是否存在消息,如果存在则不需要做任何处理,如果不存在,则通过RPC通信通知生成者重新发送消息

mq2.png
上一篇下一篇

猜你喜欢

热点阅读