文章目录
现有需求:
确保消息100%发送成功。
使用消息补偿机制:
1.业务数据入库
在发送消息前,先将消息入库
2.发送消息
发送消息m到消息队列Q1,Consumer监听到Q1的消息m后,消费消息m,并将消息m入库。然后发送确认消息给Q2,回调检查服务监听到Consumer反馈的确认消息后,也将消息写入数据库MDB。这是消息发送成功的正常情况。
倘若:发送消息失败,那么Consumer消费不到消息,Consumer的消息入库操作也失败了。这时也不用担心,因为在我们发送消息m后,过了几分钟后也会进行延迟发送消息m的副本给Q3,回调检查服务监听到延迟消息后,与MDB中的进行比对,MDB中没有消息m的记录,这说明Consumer消费消息m失败,那么回调检查服务就远程调用Producer跟它说一下再重发消息m,又重新进行上面消息发送的步骤。
几率很小的发送消息失败情况:
发送消息失败,延迟发送消息也失败。。。
这时定时检查服务会将消息数据库MDB中与业务数据库DB进行比对,然后让producer重发缺失的消息。