【问题标题】:How to ensure that 2 remote operations complete successfully, and rollback all operations if 1 of the remote operations fails?如何确保 2 个远程操作成功完成,如果 1 个远程操作失败则回滚所有操作?
【发布时间】:2015-01-16 14:48:05
【问题描述】:

我打算使用 PHP 连接到 2 个远程服务器。一种是 MySQL 数据库。另一个是 Job Queue 服务器。

对于我推送到作业队列服务器的每个作业,我想确保(准确)1 条记录插入到 MySQL 数据库中。我想确保 MySQL DB 记录和 Job Queue 任务执行是 100% 同步的。

由于两者都是远程服务器,我担心有时可能会出现与其中一个服务器(或两者)的连接问题。

在我的 PHP 应用程序中,如何确保 2 个远程操作成功完成,并在其中 1 个远程操作失败时回滚所有操作?对于这种情况,我应该遵循任何编程最佳实践吗?

【问题讨论】:

  • 为什么不能尝试连接两台服务器,在执行任何操作之前,检查两台服务器上的连接过程是否成功?

标签: php mysql transactions rollback


【解决方案1】:

这听起来像是一个非常基本的AND 用例。由于您使用的是 PHP,因此您不必担心异步调用或超时等待。对其进行伪编码:

Start Transaction1
    ... do stuff... //transaction 1 still open, no commit
Start Transaction2
    ... do more stuff...
If (Transaction1 success && Transaction2 success) {
    commit Transaction1
    commit Transaction2
} else {
    rollback Transaction1
    rollback Transaction2
}

【讨论】:

    猜你喜欢
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-26
    相关资源
    最近更新 更多