MongoDB 多文档事务的 Panache 最佳实践

MongoDB Panache Best Practices for Multi-Document Transactions

关于 MongoDB Panache 文档中的以下引述 [https://quarkus.io/guides/mongodb-panache]

MongoDB offers ACID transactions since version 4.0. MongoDB with Panache doesn’t provide support for them.

因此,是否有推荐的方法或最佳实践来处理多文档事务以确保原子性?

考虑示例:

public void buyCarTest() {   
    carRepository.increaseStock(1); 
    cashRepository.decreaseCash(10000);
}

如果我们手动执行,它将是:

  1. 检查写入第二个存储库的操作是否失败,并且
  2. 如果是,恢复在 carRepository
  3. 中所做的更改

这种方法充其量似乎很脆弱,尤其是当我写入的存储库超过 2 个时。

谢谢。

你提出的就是所谓的补偿,实现起来比较棘手

我宁愿为此使用基于事件的机制:您发送两个事件并异步处理它们,因此其中一个租户(股票经理)的故障不会影响第二个。

您也可以使用 MongoDB 事务,但为此您需要使用 MongoDB API 而不是 Panache(因此从您的实体获取集合并使用它)。

对 MongoDB 的事务支持正在进行中(请参阅 https://github.com/quarkusio/quarkus/pull/7222)您可以关注此问题,以便在实施时收到通知。