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
带着疑问去思考,然后串联,进而归纳总结,不断追问自己,进行自我辩证,像侦查嫌疑案件一样看待技术问题,漆黑的街道,你我一起寻找线索,你就是技术界大侦探福尔摩斯