关于下面在MongoDB Panache文档[https://quarkus.io/guides/mongodb-panache]
中的引用MongoDB从4.0版开始提供ACID事务。具有Panache的MongoDB不为其提供支持。
这样,在处理多文档事务以确保原子性方面是否有推荐的方法或最佳实践?
考虑示例:
public void buyCarTest() {
carRepository.increaseStock(1);
cashRepository.decreaseCash(10000);
}
如果我们要手动进行操作,它将是:
carRepository
中所做的更改这种方法充其量似乎是微不足道的,尤其是当我要写入两个以上的存储库时。
谢谢。
答案 0 :(得分:2)
您建议的是所谓的补偿,实施起来很棘手。
为此,我宁愿使用基于事件的机制:您发送这两个事件并异步处理它们,因此,一个租户(股票经理)的失败不会影响第二个事件。
您还可以使用MongoDB事务,但是为此您将需要使用MongoDB API而不是Panache(因此请从您的实体获取集合并使用它)。
对MongoDB的事务支持尚在进行中(请参见https://github.com/quarkusio/quarkus/pull/7222),您可以观看此问题,使其在实施时得到通知。