【发布时间】:2019-01-14 22:34:28
【问题描述】:
我正在构建一个使用基于 Java Transaction API(JTA) 实现的事务管理器的微服务。
我的问题是 Trasaction maanger 是否有能力处理分布式数据库场景中的并发问题。
场景:
假设有多个服务实例正在运行,我们收到两个请求,将帐户中的余额金额更新 10。最初,一个帐户可以有 100 美元,第一个实例得到它并将其增加到 10 美元,但尚未提交。
同时,第二个实例还检索仍然为 100 的帐户并将其增加 10 美元,然后将其提交更新余额为 110 美元,然后服务一个再次将帐户更新为 110 美元。
到这个时候你一定已经知道余额应该增加 20 美元而不是 10 美元。我是否必须编写某种乐观锁异常机制来防止上述情况,或者基于 JTA 规范的事务管理器是否已经确保这种事情不会发生吧?
【问题讨论】:
-
为什么要存储总金额?为什么不存储交易并总结。 Si 当前余额为 100。服务调用 1 添加新事务 10,第二个也添加 10。余额显示所有交易的总和并显示120。不需要一些全局交易处理。
-
这是一个典型的例子,你必须处理乐观锁定。它与微服务无关,也没有分布式事务。也许这会对你有所帮助...baeldung.com/jpa-optimistic-locking
标签: java concurrency microservices distributed-transactions optimistic-locking