- 消息详解 - 一、概述在 《柔性事务之TCC详解》 和《柔性事务之Saga详解》两文中我们详细剖析了柔性事务的第一个分支补偿型事务。在《刚性事务总结和柔性事务概述》中我们介绍过的柔性事务包含补偿型事务和通知型事务。 通知型事务主要包含事务消息和最大努力通知型分布式事务两个组成。通知型事务的核心思想是通过MQ来通知其他事务参与者自己事务的执行状态。MQ组件的引入有效的将事务参与者解耦开,各个参与者都可以异步执行,所以通知型事务又称为异步事务。 事务消息的难度在于服务本地事务和投递消息的一致性保障。目前业界解决这个一致性的方案有两个分支: - 基于MQ自身的事务消息方案
- 基于DB的本地消息表方案
- 基于MQ自身的事务消息方案 - 基于MQ的事务消息方案主要依靠MQ的半消息机制来实现投递消息和参与者自身本地事务的一致性保障。半消息机制实现原理其实借鉴的2PC的思路,是二阶段提交的广义拓展,流程图如下: 1、事务发起方首先发送prepare消息到MQ; 2、在发送prepare消息成功后执行本地事务; 3、根据本地事务执行结果返回commit或者是rollback; 4、如果消息是rollback, MQ将删除该prepare消息不进行下发,如果是commit消息,MQ将会消息发送给consumer端; 5、如果执行本地事务过程中,执行端挂掉,或者超时,MQ服务器端将不停的询问producer来获取事务状态; 6、Consumer端的消费成功机制有MQ保证 MQ事务消息方案因为使用了半消息机制,对业务页具有比较大侵入性,有以下注意点: 1、 业务方调用半消息,并提供对应的回查方法; 2、 MQ提要提供半消息机制,并定期扫描长期半消息,对消息生产者进行回查确认事务。 3、 消费方需要进行幂等消费。
|