保障消息100%投递成功设计方案
什么是生产端的可靠性投递?
- 保障消息的成功发出
- 保障MQ节点的成功接收
- 发送端收到MQ节点(Broker) 确认应答
- 完善的消息补偿机制
如果想保障消息100%投递成功,只做到前三步不一定能够保障。有些极端情况,比如生产端在投递消息时可能失败了,或者说生产端投递了消息,MQ Broker也收到了,MQ Broker在返回确认应答时,由于网络闪断导致生产端没有收到应答,此时这条消息就不知道投递成功了还是失败了,所以针对这些情况需要做一些补偿机制。
互联网大厂的解决方案:
- 消息落库,对消息状态进行打标
- 消息的延迟投递,做二次确认,回调检查
具体使用哪种要根据业务场景和并发量、数据量大小来决定
方案一:消息信息落库,对消息状态进行打标的方案如下图:
step 1:进行业务数据入库:比如发送一条订单消息,首先把业务数据也就是订单信息进行入库,然后生成一条消息,把消息也进行入库,这条消息应该