基于本地消息的分布式事务
如果消息中间件没有提供事务消息,如何保证分布式事务?
本地消息表(经典的ebay模式)
核心思想在于分布式系统在处理任务时通过消息日志的方式来异步执行。消息日志可以存储在本地文件,数据库。然后在通过业务规则定时任务或者人工重试。
解决方案:
1.Producer端准备一张消息表,把业务操作和insert message这两个操作,放在一个DB事务里面。
2.准备一个后台任务,异步的把消息表中的message传送给消息中间件。失败了不断重试,直到成功,更新发送状态
3.Consumer监听新消息,保存新消息到本地DB,消息ACK。然后处理消息,更新消息处理状态,定时从数据库中查询未处理的消息来处理(用户宕机等环境的数据修复)。
如果消息中间件没有提供事务消息,如何保证分布式事务? 本地消息表(经典的ebay模式) 核心思想在于分布式系统在处理任务时通过消息日志的方式来异步执行。消息日志可以存储在本地文件,数据库。然后在通过业务规则定时任务或者人工重试。 解决方案: 1.Producer端准备一张消息表,把业务操作和insert message这两个操作,放在一个DB事务里面。 2.准备一个后台任务,异步的把消息表中的message传送给消息中间件。失败了不断重试,直到成功,更新发送状态 3.Consumer监听新消息,保存新消息到本地DB,消息ACK。然后处理消息,更新消息处理状态,定时从数据库中查询未处理的消息来处理(用户宕机等环境的数据修复)。下一篇:
python 操作sqlite数据库