RabbitMQ消息补偿

RabbitMQ 中,我们要保证消息 100% 发送成功,我们就需要使用消息补偿机制,具体原理如下:

14_RabbitMQ消息补偿.png

整个流程说明如下:

  1. 2 发送正常消息,3 过会再发一条相同的消息。
  2. 2 发送的消息在 Q1 中被正常消费到写入 DB,发送 ack 给 Q2。回调检查服务监听到 Q2 的消息,将消息写入 MDB。
  3. 如果 1 成功 2 失败,因为 3 页发送了消息放入 Q3。此时回调检查服务也监听到了 Q3,要去比对 MDB 是否一致,如果一致则代表消费过。如果 MDB 中不存在,就代表 2 失败了,就走 8 让生产者重新发。
  4. 如果 2 个都发送失败了,有 MDB 的定时检查服务,比对业务数据库 DB 与消息数据库 MDB,就能发现差异。