将多个命令作为事务处理

Handling multiple commands as transaction

我目前正在开发支付系统,该系统执行支付并在云托管数据库 Azure 中写入购买的商品。

目前的运作方式是:

  1. 与第三方支付系统的交易
  2. 如果成功,将在数据库中为用户添加新的订阅行
  3. 交易历史和其他相关内容被写入数据库

但是,在不太可能发生的情况下:

  1. 交易成功(http调用支付网关returns成功)
  2. 由于某种原因,插入数据库失败

我最终会看到用户已经为某个项目付款而没有实际订阅该项目。(因为该行不会在我们的数据库中)

这两个调用与数据库无关(一个是,另一个是简单的异步 http 请求)所以我不能将它们视为事务(因为我不能真正回滚)。

所以我的问题是请更有经验的人如何处理这种情况?

为了回答这个问题,我使用补偿事务模式实现了这个。

按预期工作