1

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

MongoDB 从 4.0 版开始提供 ACID 事务。带有 Panache 的 MongoDB 不为它们提供支持。

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

考虑这个例子:

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

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

  1. 检查对第二个存储库的写入操作是否失败,以及
  2. 如果是这样,则恢复在carRepository

这种方法充其量似乎是微不足道的,尤其是如果我要写入的存储库超过 2 个。

谢谢。

4

1 回答 1

2

您提出的是所谓的补偿,实施起来很棘手。

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

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

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

于 2020-06-17T10:40:30.310 回答