php - 存储过程和 REST API 作为事务调用
问题描述
Imagen 您在从 PHP 调用的数据库中有一个存储过程。该过程像事务一样工作,并将数据选择/插入到数据库中。如果成功则提交,如果失败则回滚。
现在想象一下,您需要通过 REST 在外部系统中存储相同的数据 - 在事务中。
因此,如果您首先运行存储过程并且它提交,那么如果 API 调用失败,您将无法回滚数据库。如果您首先运行 API 调用并且它成功了,那么如果存储过程失败,您将无法回滚 API 调用。
我需要在 PHP 的一个事务中更新本地数据库 (SP) 和两个不同的 API 端点。
任何人都可以就如何管理这笔交易提供建议吗?
谢谢!
解决方案
尝试将您的服务设计得尽可能彼此分离。如果您的外部服务必须在事务中更新,这是一个明显的耦合迹象。对于您的特定情况,外部服务是否需要立即更新,还是我们可以依赖最终的一致性?
我建议尝试将对外部服务的调用推送到队列。就您的本地服务而言,应该执行事务,然后应该将两个服务分派到队列中以更新您的外部服务。
现在,队列的魔力在于您通常可以监视它们,并在出现错误时重播失败的那些。在正常情况下,队列中的作业将毫无问题地运行。当出现错误时,开发人员会进入,修补它,然后重播作业。最终,外部服务赶上了本地服务。
推荐阅读
- git - VSCode devcontainers:在同一个devcontainer中克隆第二个存储库时git权限被拒绝
- reactjs - WebStorm 无法识别 Next.js 项目
- azure - 验证我的 Azure 帐户会打开一个安全性无效的 localhost 网页
- mysql - 如何将cassandra和Mysql配置为spring boot?
- spring-mvc - SPRING MVC:获取从表单返回的键值:选择
- firebase - 从 Firebase Cloud Function 获取当前日期和时间
- java - 简化多个构造函数
- ubuntu-20.04 - Android VTS 在 ubuntu20.4.3LTS 上失败
- javascript - 在循环中调用 ajax,它不会执行 2 次
- r - 从 URL 读取 csv 时出错:functionert 协议版本中的错误