【问题标题】:JBoss messaging and XA transactions: JMS messages are lostJBoss 消息传递和 XA 事务:JMS 消息丢失
【发布时间】:2012-06-21 22:11:57
【问题描述】:

我对分布式 JMS 进行了一些测试,但目前遇到以下问题。

我有两台服务器。第一个是带有 JBoss Messaging 1.4.3 的 JBoss 5.1,第二个是带有两个 MDB 的 JBoss 5.1。一个 MDB 正在将消息从队列 A 路由到 B。另一个正在做相反的事情 - 从 B 路由到 A。因此队列 A 和 B 上的消息总和应该是恒定的。只要我正确关闭服务器。

但是如果我使其中一台服务器的进程崩溃(使用kill -9),我可以观察到消息丢失(不多但可见)。我不明白为什么。看来它毕竟没有使用 XA。

我在JBM服务器上尝试了HSQLDB和Oracle作为持久化,但是效果是一样的。

我使用JmsXA 作为ConnectionFactory

有什么想法吗?

【问题讨论】:

    标签: jboss transactions jms xa


    【解决方案1】:

    经过一些研究(及时延长),我发现 XA 恢复配置不正确并且消息无法访问,因为全局事务从未完成。 尼古拉斯的回答指出了这一点,非常感谢。 http://docs.jboss.org/jbossmessaging/docs/userguide-1.4.0.SP3/html_single/index.html#recovery

    【讨论】:

      【解决方案2】:

      据我了解,您正在尝试跨多个服务器 (JVM) 协调 XA 事务,这要求您的服务器配置 JTS,而 JBoss 服务器通常仅默认配置为 JTA。只是为了确保我们在这里讨论的是相同的版本,当我在启动 JBoss AS 5.1 时查看我的控制台日志时,它会报告以下 JBossTS 版本:

      08:46:59,678 INFO [TransactionManagerService] JBossTS 事务 服务(JTA 版本 - 标签:JBOSSTS_4_6_1_GA_CP07

      假设这与您正在运行的版本大致相同,您应该查看此下载中可用的 JBossTS 文档中包含的所有文档:jbossts-full-4.6.1.GA.zip。具体来说,请查看标题为 JBossTS 4.6.0 服务器集成指南 的 PDF,其中将 Arjuna 事务管理器的不同个性定义为:

      JBossTS 由一个事务引擎 ArjunaCore 组成,具有多个 围绕它分层的“个性”。

      JBossTS JTA 提供了一个 JTA 1.1 适用于 Java Enterprise Edition 的兼容事务管理器 应用程序。事务范围仅限于单个 JVM。这是 适用于不需要事务的应用程序 JVM 之间业务方法调用的上下文传播。为了 例如,只有一个应用程序服务器的部署 使用实例或使用多个此类实例进行加载 仅平衡,它们之间没有事务通信。

      JBossTS JTS 提供基于 CORBA 的分布式事务管理 可以通过 JTS 原生 API 或 JTA 驱动 接口。它适用于事务上下文的情况 必须跨越多个 JVM,例如部署在 应用程序服务器集群,或需要互操作性的地方 异构 Java 之间的事务性业务方法调用 应用程序服务器,或 Java 和遗留应用程序编写 另一种具有 CORBA 绑定的语言。

      并且还断言:

      对于涉及多个 JVM 的事务用例,JBossTS JTS 是 必填。

      还请查看有关JBoss Messaging XA 配置 的此附带条件。确保遵循 JTA 文档中标题为 JBoss Messaging XA Recovery Configuration 的部分中概述的配置说明。

      该文档对您需要做的事情提供了一个不错的总结,但是独立 JBossTS 实例的安装和配置的详细信息在标题为 JBoss Transactions 4.6.0 安装指南的文档中,而AS 5.1 发行版本身的 \docs\examples\transactions\README.txt

      中的文档概述了用 JTS 服务替换 AS 5.1 JTA 事务服务

      说了这么多,如果有任何方法可以使用一台服务器来实现您的解决方案,我想您会发现这是更可取的方法。

      干杯。

      //尼古拉斯

      附:正确安装 JTS 后,控制台日志将在启动时显示如下内容:

      09:41:03,558 INFO [TransactionManagerService] JBossTS 事务服务(**JTS 版本 - 标签:JBOSSTS_4_6_1_GA_CP07)**

      【讨论】:

        【解决方案3】:

        单独启用 XA 的连接工厂不能保证事务性。发送者和接收者都应该声明他们正在使用事务,在这个关于Container-managed transactions docs 的 Java EE 6 文档中显示。

        另外,请确保您的消息是持久发送的。我建议对事务管理器进行一些跟踪/调试日志记录,以确保您的事务在应该正确提交时正确提交。

        【讨论】:

        • 当在路由方法结束之前发生异常时,jms 上没有任何变化,所以看起来事务回滚工作正常......
        猜你喜欢
        • 2011-01-29
        • 1970-01-01
        • 2011-01-25
        • 2011-02-26
        • 1970-01-01
        • 1970-01-01
        • 2015-08-03
        • 2016-02-23
        • 1970-01-01
        相关资源
        最近更新 更多