MongoDB Panache多文档事务最佳实践

时间:2020-06-17 08:15:13

标签: quarkus quarkus-panache

关于下面在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中所做的更改

这种方法充其量似乎是微不足道的,尤其是当我要写入两个以上的存储库时。

谢谢。

1 个答案:

答案 0 :(得分:2)

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

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

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

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

相关问题