A调用B,B调用C,如何确保一致性?
\1. MQ:无论A、B、C监听事件失败消息,并针对不同业务类型和业务id进行回滚操作即可
\2. TCC:每个服务都开发T、C、C三种类型的接口,A调用B的Try操作成功,当B调用C的Try失败次数达到阈值后,先执行自己的业务Cancel方法,然后调用A的Cancel接口
Try—Confirm—Cancel
参考:https://zhuanlan.zhihu.com/p/61129707
\3. 软状态:A调用B的时候执行为预操作状态,B调用C如果成功也执行为预操作状态,这样无论哪一环出了问题,都不会影响业务数据的一致性。因为中间状态的数据,对于业务一定是不可用的状态。我们只需要在调用失败的时候做出相应的通知等其他处理策略即可(比如通知+人工,定时任务处理软状态等)。如果都执行为预操作状态成功,再触发修改为执行状态
允许重试,比如说马上重试,重试多次后无果则判定失败,又或者通过定时任务查询。
上次更新: 2024-05-23 10:33:15