参考:
https://www.tizi365.com/question/4832.html
https://www.cnblogs.com/FlyAway2013/p/10124283.html
简单的讲,就是生产方需要多维护一个已发送消息的数据表(与业务表在一个库,方便执行业务事务),发送完 MQ 消息后等待消费方回调后再更新本地消息表。
如果消费方没有回调,则本地定时任务进行重新投递确认,确保最终一致性。
如果使用支持事务消息的 RocketMQ,可以简化这个步骤,不需要维护本地消息表。