如何确保2个远程操作成功完成,如果其中一个远程操作失败,则回滚所有操作?

时间:2015-01-16 14:48:06

标签: php mysql transactions rollback

我计划使用PHP连接到2个远程服务器。一个是MySQL数据库。另一个是作业队列服务器。

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

由于两者都是远程服务器,我担心有时可能会对其中一台服务器(或两者)产生连接问题。

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

1 个答案:

答案 0 :(得分:0)

这听起来像一个非常基本的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
}