分布式事物解决方案

分布式事物总体有两类方案:

①刚性方案,全局事物(标准的分布式事物)如二阶段提交协议。

【尽量保证了数据的强一致,适合对数据强一致要求很高的关键领域。实现复杂,牺牲了可用性,对性能影响较大,不适合高并发高性能场景】

②柔性方案:

1)可靠消息最终一致性(异步确保型)

2)TCC (Try-Confirm-Cancel)(补偿型)

3)最大努力通知(非可靠消息,定期校对)

4)纯补偿型

以下是柔性方案中的几个实现

可靠消息最终一致性-本地消息服务


可靠消息最终一致性-本地消息服务


可靠消息最终一致性-独立消息服务

如果使用RocketMQ,在本地应用的逻辑代码里(橘黄色字体)可以不用这样写。如果是ActiveMQ、RabbitMQ 和 Kafka需要分三个阶段①预发送消息②业务逻辑③确认发送消息。

RocketMQ事物消息:

第一阶段Prepared消息,会拿到消息的地址。

第二阶段执行本地事务。

第三阶段通过第一阶段拿到的地址去访问消息,并修改状态。

也就是说在业务方法内要想消息队列提交两次请求,一次发送消息和一次确认消息。如果确认消息发送失败了RocketMQ会定期扫描消息集群中的事务消息,这时候发现了Prepared消息,它会向消息发送者确认,所以生产方需要实现一个check接口,RocketMQ会根据发送端设置的策略来决定是回滚还是继续发送确认消息。这样就保证了消息发送与本地事务同时成功或同时失败。

rocketMq事物消息
最大努力通知
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容