JBoss 消息传递和 XA 事务 : JMS messages are lost

标签 jboss transactions jms xa

我对分布式 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

有什么想法吗?

最佳答案

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

08:46:59,678 INFO [TransactionManagerService] JBossTS Transaction Service (JTA version - tag:JBOSSTS_4_6_1_GA_CP07)

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

JBossTS consists of a transaction engine, ArjunaCore, with multiple 'personalities' layered around it.

JBossTS JTA provides a JTA 1.1 compliant transaction manager for Java Enterprise Edition applications. Transaction scope is limited to a single JVM. This is suitable for use in applications that do not require transaction context propagation on business method calls between JVMs. For example, deployments in which only a single application server instance is used or where several such instances are used for load balancing only, with no transactional communication between them.

JBossTS JTS provides CORBA based distributed transaction management that may be driven either though JTS native API or though the JTA interfaces. It is suitable for situations in which transaction context must span multiple JVMs, such as a Java EE application deployed on an application server cluster, or where interoperability is required for transactional business method calls between heterogeneous Java application servers, or Java and legacy applications written in another language with CORBA bindings.

并且还断言:

For transaction use cases involving multiple JVMs, JBossTS JTS is required.

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

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

中的 AS 5.1 发行版本身的文档中概述了用 JTS 服务替换 AS 5.1 JTA 事务服务

综上所述,如果有任何方法可以使用一台服务器实现您的解决方案,我想您会发现这是更可取的方法。

干杯。

//尼古拉斯

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

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

关于JBoss 消息传递和 XA 事务 : JMS messages are lost,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11108296/

相关文章:

java - Spring @Transactional 只读模式回滚行为

java - JMSClient(在某些情况下也是生产者)是否接收它自己发送的消息

java - 当客户端停止工作时,JMS 有 javax.jms.InvalidDestinationException

hibernate - @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) 何时提交? - 跟进

jboss - Spring boot 和 JBoss 8 Wildfly 日志配置应用

jboss - jboss 6.x 中的树缓存

java - 持久化实体不可序列化

java - JBoss中如何清除server.log?

ASP.NET MySQL更新多条记录

transactions - 我应该在以太坊上有多少个确认?