RocketMq生产者的投递的可靠性保障

可靠性保障

先上一个示意图

 

 

就上述的图示,我们逐步解析

  • step1:数据落库,这一步是必须的
  • step2:把消息落库,且初始化其状态为 0 (发送中)
  • step3:把消息投递到 Broker 中
  • step4:Broker 发送成功应答
  • step5:生产者拿到成功应答,修改消息状态为1:(发送成功) 上面讲述的都是正常的流程,下面讲讲如果出现不正常的解决机制:
  • step6:定时检查消息的状态是否为1
  • step7:如果 step6 的消息的状态仍然为 0 ,则进入重发,重复上述 step3 - step5
  • step8:如果消息重发达到一定的的次数,则人工接入处理。

上述的方案看似完美无缺,但是细想,如果在 step4 中 Broker 发送应答的过程中,网络出现问题这个消息没有到达生产者会导致整个流程进入补偿的流程当中,此时 Broker 中就有两条消息,也就是发成了重复的投递的问题,我们要在消费端幂等来处理这个问题。

 

转载:https://zhuanlan.zhihu.com/p/364418823

 

  

 
 
 
posted @ 2022-04-19 17:18  迷走神经  阅读(80)  评论(0编辑  收藏  举报