分布式事务—最终一致性模型(无独立消息系统)
参考:https://blog.****.net/shanchahua123456/article/details/84781638
流程
1 上游程序/数据库(生产者):
1.1 本地事务 【生成唯一ID——》执行业务流程 ——》 本地保存消息数据(db_queue 表) ——》发送到MQ】
本地事务中任意异常都会回滚,但小概率出现 MQ发送成功,但是本地事务未提交。
所以下游消费时,要确认上游业务已完成。若是简单的数据传输/同步则不需要确认,因为上游无数据,下游也不会拉取到数据。
1.2 确认接口:回写业务表状态,删除db_queue 表
1.3 查询接口:状态业务表、db_queue 表查询
2 消息恢复功能:(注意幂等性设计)
2.1查询上游程序超时未发送,重发;
2.2查询上游程序超时未确认数据,去下游消费者查询,若下游已消费则上游标志确认,若下游未消费则重发
3 下游程序/数据库(消费者):(注意幂等性设计)
3.1 根据业务判断是否需要查询上游业务已完成,避免。(数据传输不需要)
3.2 本地事务 【 幂等执行业务流程 ——》 用上游接口,确认上游业务数据 】
3.3 注意MQ的可靠消费,手动ACK,限制收取量
3.4 数据库幂等设计可以依靠,主键/唯一索引/先查再写(一定概率有问题)