将多个命令作为事务处理
Handling multiple commands as transaction
我目前正在开发支付系统,该系统执行支付并在云托管数据库 Azure 中写入购买的商品。
目前的运作方式是:
- 与第三方支付系统的交易
- 如果成功,将在数据库中为用户添加新的订阅行
- 交易历史和其他相关内容被写入数据库
但是,在不太可能发生的情况下:
- 交易成功(http调用支付网关returns成功)
- 由于某种原因,插入数据库失败
我最终会看到用户已经为某个项目付款而没有实际订阅该项目。(因为该行不会在我们的数据库中)
这两个调用与数据库无关(一个是,另一个是简单的异步 http 请求)所以我不能将它们视为事务(因为我不能真正回滚)。
所以我的问题是请更有经验的人如何处理这种情况?
为了回答这个问题,我使用补偿事务模式实现了这个。
按预期工作
我目前正在开发支付系统,该系统执行支付并在云托管数据库 Azure 中写入购买的商品。
目前的运作方式是:
- 与第三方支付系统的交易
- 如果成功,将在数据库中为用户添加新的订阅行
- 交易历史和其他相关内容被写入数据库
但是,在不太可能发生的情况下:
- 交易成功(http调用支付网关returns成功)
- 由于某种原因,插入数据库失败
我最终会看到用户已经为某个项目付款而没有实际订阅该项目。(因为该行不会在我们的数据库中)
这两个调用与数据库无关(一个是,另一个是简单的异步 http 请求)所以我不能将它们视为事务(因为我不能真正回滚)。
所以我的问题是请更有经验的人如何处理这种情况?
为了回答这个问题,我使用补偿事务模式实现了这个。
按预期工作