java - JMS 本地事务与 TransactionManager

标签 java transactions jms spring-jms distributed-transactions

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

场景1:

使用来自 Jms 代理的消息,处理消息并在处理成功后提交事务,否则回滚。

场景 2:

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

使用 JMS commit()、rollback() API(又名本地事务)与使用事务管理器(例如 Spring 的 PlatformTransactionManager 类)之间到底有什么区别?在第二种情况下是否需要事务管理器?为什么需要/不需要?

最佳答案

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

手动管理单独的事务会造成漏洞,例如服务器 A 事务已提交,但服务器 B 由于任意数量的错误条件(网络、应用程序故障等)而无法提交。在很多类似的场景中,事务管理器可以缓解这些问题。

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

关于java - JMS 本地事务与 TransactionManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35254807/

相关文章:

java - 在 Java Android 中从图像获取坐标

mongodb - 为什么 Mongoid 中没有 "transaction"方法?

java - spring hibernate乐观锁问题

java - Spring + JWS + Tomcat

java - 排序具有键长的集合

database - Laravel DB::rollback() 不适用于交易流程

java - ActiveMQ 传输 : tcp: Thread RUNNABLE state - too many threads hanging

java - 如何从 Activemq 异步拉取消息

java - 如何在 Spring boot 中动态地向 JMSListener Annotation 添加不同的目的地?

java - 需要正则表达式的说明(帮助)