分布式事务—最终一致性模型(无独立消息系统)

参考:https://blog.csdn.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 数据库幂等设计可以依靠,主键/唯一索引/先查再写(一定概率有问题)

猜你喜欢

转载自blog.csdn.net/shanchahua123456/article/details/84950628