JMS 本地事务与 TransactionManager

JMS Local transactions vs TransactionManager

我最近一直在研究 Jms API,但我不确定我是否了解本地与事务管理器之间的差异。

场景 1:

从 Jms 代理消费消息,处理消息并在处理成功后提交事务,否则回滚。

场景 2:

我想将消息从一个代理代理到另一个代理,但我不想使用 XA 事务,因为它的速度很慢。所以我的想法是为我消费的经纪人开始一个交易,然后在该交易中为我生产的经纪人开始第二个交易,然后连续提交两个交易。 让我们忽略这种情况下可以减轻的重复风险问题

使用 JMS commit()、rollback() APIs(又称本地事务)与使用诸如 Spring 的 PlatformTransactionManager class?在第二种情况下是否需要事务管理器,为什么 so/not?

事务管理器将确保跨服务器的事务将一起提交或一起回滚。

手动管理单独的事务会带来漏洞,例如服务器 A 事务已提交但服务器 B 不能,因为任何数量的错误条件(网络、应用程序故障等)。有很多这样的场景,事务管理器可以缓解这些问题。

这可能是因为您的应用程序是幂等的并且可以处理多次看到相同的消息并正确处理它,或者存在可以纠正不良情况的流程问题,在这种情况下您可能没问题。