1 发送半消息
2 mq server 发送半消息成功给发送方
3 发送方收到后,执行本地事务
4 发送方主动提交事务状态,成功or 失败
5 如果成功,mq server 投递到下游,执行下游事务。
6 如果失败,mq server 删除消息
7 如果迟迟没有收到发送方提交事务状态,mq server 会主动去发送方查询,该逻辑需要发送方实现。
8 检查本地事务。根据成功or失败,选择走第5步还是第6步。
补充:
1 如果下游事务失败,需要重试,并有报警人工介入的机制。
2 第7步mq server 会不断的回查直到超时或者次数上限。
3 回查的时候,本地事务有3种状态,commit rollback unkown
4 回查的逻辑就是看本地事务提交的数据在不在,如果不在不能认为是失败了
要返回unkown
优点:稳定可靠,毕竟是经历过双11的
缺点:有侵入性,需要业务实现者多写一个确认事务状态的方法