假设您在从PHP调用的数据库中有一个存储过程。该过程的工作方式类似于事务,它选择数据/将数据插入数据库。如果成功,则提交,如果失败,则回滚。
现在假设您需要通过REST在事务中将相同的数据存储在外部系统中。
因此,如果您首先运行存储过程并提交,那么如果API调用失败,您将无法回滚数据库。如果您首先运行API调用并且成功,那么如果存储过程失败,您将无法回滚API调用。
在PHP中,我需要在一个事务中更新本地数据库(SP)和两个不同的API端点。
有没有人能就如何管理这笔交易提出建议?
谢谢!
发布于 2021-08-06 01:07:25
尝试将您的服务设计为尽可能相互独立。如果您的外部服务必须在事务中更新,这是一个明显的耦合迹象。对于您的特定情况,外部服务是否需要立即更新,或者我们是否可以依赖最终的一致性?
我建议尝试将对外部服务的调用推送到队列中。就您的本地服务而言,应该执行事务,然后将两个服务分派到队列以更新您的外部服务。
现在,队列的神奇之处在于,您通常可以监视它们,并在出现错误的情况下重放失败的队列。在正常情况下,队列中的作业将正常运行。当出现错误时,开发人员会进入,对其进行修补,然后重播作业。最终,外部服务会赶上本地服务。
https://stackoverflow.com/questions/68674433
复制相似问题