根据克里斯里查德森所写的关于在微服务中补偿sagas中的事务的内容:
什么是补偿交易? rejectOrder()命令是补偿事务的一个示例。与ACID事务不同,sagas不能自动撤消以前步骤所做的更改,因为这些更改已经提交。相反,您必须编写显式撤消这些更改的补偿事务。传奇中的每一步都必须有相应的补偿事务。。 在createOrder中,createOrder()具有rejectOrder()补偿事务,因为reserveCredit()步骤可能失败。reserveCredit()步骤不需要补偿事务,因为approveOrder()步骤不会失败。而且,approveOrder()步骤不需要补偿事务,因为它是saga的最后一步。
这是否意味着一个步骤不需要补偿事务,只要它接下来的步骤不会因为业务原因而导致失败?如果以下步骤由于某些技术原因( --一些bug或一些微服务间通信问题)而失败怎么办?
发布于 2021-04-19 15:53:20
这是因为,如果没有业务错误,当技术问题得到解决时,您可以重试通信或安排通信,并且在发生时状态将是正确的。
请记住,技术问题是短暂的,在微服务体系结构中,您必须处理最终的一致性问题。
https://stackoverflow.com/questions/67157237
复制相似问题