我最近一直在研究 Jms API,但不确定我是否理解本地与事务管理器的差异。
场景1:
使用来自 Jms 代理的消息,处理消息并在处理成功后提交事务,否则回滚。
场景 2:
我想将消息从一个代理代理到另一个代理,但我不想使用 XA 事务,因为它的速度很慢。因此,我们的想法是为我正在消费的代理启动一个事务,然后在该事务中为我正在生成的代理启动第二个事务,然后连续提交这两个事务。 让我们忽略这种情况下可以减轻的重复风险问题
使用 JMS commit()、rollback() API(又名本地事务)与使用事务管理器(例如 Spring 的 PlatformTransactionManager 类)之间到底有什么区别?在第二种情况下是否需要事务管理器?为什么需要/不需要?
最佳答案
事务管理器将确保跨服务器的事务要么一起提交,要么一起回滚。
手动管理单独的事务会造成漏洞,例如服务器 A 事务已提交,但服务器 B 由于任意数量的错误条件(网络、应用程序故障等)而无法提交。在很多类似的场景中,事务管理器可以缓解这些问题。
您的应用程序可能是幂等的,可以多次查看相同的消息并正确处理它,或者存在可以纠正不良情况的流程问题,在这种情况下您可能没问题。
关于java - JMS 本地事务与 TransactionManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35254807/