系统 A 本地事务执行完之后,发送个消息到 MQ;
这里会有个专门消费 MQ 的最大努力通知服务,这个服务会消费 MQ 然后写入数据库中记录下来,或者是放入个内存队列也可以,接着调用系统 B 的接口;
要是系统 B 执行成功就 ok 了;要是系统 B 执行失败了,那么最大努力通知服务就定时尝试重新调用系统 B,反复 N 次,最后还是不行就放弃。
XA 方案两阶段提交TCC 方案TryConfirmCancel本地消息表可靠消息最终一致性方案A系统先发送一个prepared消息到mq,如果这个prepared消息发送失败那么就直接取消操作别执行了;如果这个消息发送成功过了,那么接着执行本地事务,如果成功就告诉mq发送确认消息,如果失败就告诉mq回滚消息;如果发送了确认消息,那么此时B系统会接收到确认消息,然后执行本地的事务;mq会自动定时轮询所有prepared 消息回调你的接口,问你,这个消息是不是本地事务处理