我最近一直在研究Jms API,我不确定我是否了解本地与事务管理器的差异。
情景1:
从Jms代理消耗消息,处理成功后处理消息并提交事务,否则回滚。
情景2:
我想将消息从一个代理代理到另一个代理,但由于其性质较慢,我不想使用XA事务。所以我的想法是为我正在消费的代理启动一个事务,然后在该事务中启动我正在生成的代理的第二个事务,然后连续提交这两个事务。 让我们忽略这个场景中可以减轻的重复风险问题
使用JMS commit(),rollback()API(Aka Local Transactions)与使用事务管理器(如Spring的PlatformTransactionManager类)之间的区别究竟是什么?在第二种情况下是否需要事务管理器以及为什么这样?
答案 0 :(得分:1)
事务管理器将确保跨越服务器的事务要么一起提交,要么一起回滚。
手动管理单独的事务会打开漏洞,例如服务器A提交的事务,但服务器B不能因为任何数量的错误条件(网络,应用程序故障等)。有许多这样的场景,其中事务管理器可以缓解问题。
可能是您的应用程序是幂等的,可以处理多次查看相同的消息并正确处理它,或者存在可以纠正错误情况的流程问题,在这种情况下您可能很好。< / p>