当前位置: 首页 > 知识库问答 >
问题:

我需要XA事务吗?DefaultMessageListenerContainer本地事务vs XA连接工厂

吴镜
2023-03-14

在我的Spring Boot应用程序中,我有以下场景:

  1. 从JMS队列读取消息
  2. 对数据做一些事情。
  3. 对Oracle数据库执行JDBC插入

如果在任何阶段发生异常,我希望确保消息没有丢失并被放置在后退队列中。

我是否需要在启用XA的JMS连接工厂和启用XA的Oracle db驱动程序之间进行XA事务?或者使用例如DefaultMessageListenerContainer并将setsionTransact标志设置为true就足够了吗?

如果第二个是正确的答案,那么使用XA事务的好情况是什么?

共有1个答案

融渊
2023-03-14

您可以通过使用Spring同步两个事务并对您的应用程序进行编码以处理重复交付的(小)可能性来避免XA(当DB提交但JMS由于DB和JMS提交之间的连接丢失而回滚时)。我建议您阅读Spring团队的Dave Syer在Spring中的出色分布式事务,包括和不包括XA。

如果javaworld在未来某个时候移动该链接,googlesyer xa Spring,您应该会找到它。

 类似资料:
  • 对于每个客户机,我们自然需要发送关于事务的反馈(OK或Exception->rollback)。 我的问题是:如果我使用,是否意味着只使用一个事务,如果第100个客户机遇到问题,第1个客户机的事务也会回滚?

  • 支持项 完全支持非跨库事务,例如:仅分表,或分库但是路由的结果在单库中; 完全支持因逻辑异常导致的跨库事务。例如:同一事务中,跨两个库更新。更新完毕后,抛出空指针,则两个库的内容都能回滚。 不支持项 不支持因网络、硬件异常导致的跨库事务。例如:同一事务中,跨两个库更新,更新完毕后、未提交之前,第一个库宕机,则只有第二个库数据提交。

  • 支持项 支持数据分片后的跨库事务; 两阶段提交保证操作的原子性和数据的强一致性; 服务宕机重启后,提交/回滚中的事务可自动恢复; 支持同时使用 XA 和非 XA 的连接池。 不支持项 服务宕机后,在其它机器上恢复提交/回滚中的数据。

  • XAShardingSphereTransactionManager 为A pache ShardingSphere 的分布式事务的 XA 实现类。 它主要负责对多数据源进行管理和适配,并且将相应事务的开启、提交和回滚操作委托给具体的 XA 事务管理器。 开启全局事务 收到接入端的 set autoCommit=0 时,XAShardingSphereTransactionManager 将调用具

  • 两阶段事务提交采用的是 X/OPEN 组织所定义的DTP模型所抽象的 AP(应用程序), TM(事务管理器)和 RM(资源管理器) 概念来保证分布式事务的强一致性。 其中 TM 与 RM 间采用 XA 的协议进行双向通信。 与传统的本地事务相比,XA 事务增加了准备阶段,数据库除了被动接受提交指令外,还可以反向通知调用方事务是否可以被提交。 TM 可以收集所有分支事务的准备结果,并于最后进行原子提

  • Serenity 使用简单的 ADO.NET 数据访问对象,像 SqlConnection、DbCommand 等。 它提供了一些基本的助手(helpers)来创建连接、添加参数、执行查询等。 SqlConnections 类 [命名空间: Serenity.Data, 程序集: Serenity.Data] 该类包含创建连接的静态函数,并在数据库中以不可见的方式控制它。 SqlConnectio