导航
导航

【复盘】基于消息补偿的分布式事务解决方案

普天同庆的十一还在苦逼的被迫加班ing,没啥事还得被按住坐在工位上

复盘三部曲的最后一篇。

核心思想是将分布式事务拆分成本地事务进行处理

消息生产方,需要额外建一个消息表,并记录消息发送状态。消息表和业务数据要在一个事务里提交。然后消息会经过MQ发送到消息的消费方。

消息消费方,需要处理这个消息,并完成自己的业务逻辑。此时如果本地事务处理成功,表明已经处理成功了,如果处理失败,那么就会重试执行。如果是业务上面的失败,可以给生产方发送一个业务补偿消息,通知生产方进行回滚等操作。

消息100%可靠性投递的解决方案:
分布式定时任务的使用:消费生产方会定时扫描本地消息表,把还没处理完成的消息或者失败的消息再发送一遍。而且进行重试发送操作,但会设置重试次数限制,性能考虑reptry的次数不大于4次。