confirm
真正执行业务,不再做业务检查
Cancel
释放Try阶段预留的业务资源
案例
汇款服务,收款服务案例
A用户向B用户汇款500元
汇款服务
try
检查A账户的有效性,及查看A账户的状态是否为..."转账中"或者"冻结"
检查A账户余额是否充足
从A账户中扣减500元,并将状态设置为转账中
预留扣减资源,将从A往B账户转账500元这个事件存入消息或者日志中
confirm
不做任何操作
cancel...和cancel)
当Saga事物中任意一个本地事物出错时,可以通过调用相关的补偿方法恢复之前的事物,到达事物最终一致性
当每个Saga子事物T1,T2,....TN都有对应的补偿定义C1,C2,.......CN-1,那么Saga系统可以保证
子事物序列T1,T2,.....TN得以完成(最佳情况)
或者序列T1,T2,...TJ,CJ-1,..., C2,C1,0<J<N,得以完成
Saga隔离性
业务层控制并发...,此时该消息被标记成"暂不能投递"状态,处于该种状态下的消息即半消息
消息回查:由于网络闪断,生产者应用重启等原因,导致某条事物消息的二次确认丢失,MQ服务端通过扫描发现某条消息长期处于半消息时,主要主动向消息生产者询问该消息的最终状态