具有持久消息的 ActiveMQ 和 XA 事务,其中 jdbc 持久性适配器使用非 xa jdbc 数据源

ActiveMQ and XA transactions with persistent messages where the jdbc persistence adapter uses a non-xa jdbc datasource

我正在开发一个发送 JMS 消息的应用程序,它只需要一次传递语义,消息侦听器代码可能与多个数据库交互,并且它们自己会发送更多消息,所以我正在使用 XA 事务。我有一个 ActiveMQ 消息代理网络,一个 JDBC 支持的持久消息存储,我正在使用 Bitronix 进行事务管理。重新交付目前由经纪人而不是消费者处理。

该应用程序有多个数据源,其中一些是 XA 支持的,另一些是非 XA 的。在查看配置时,我注意到在代理服务上设置的 JdbcPersistenceAdapter 使用的是非 xa 版本的数据源。我的直觉是此配置不正确,持久性适配器应该使用 XA 数据源。然而,就事务语义回滚/提交/重新传递消息而言,目前一切似乎都在正常工作。

我想确定我认为需要将数据源更改为 XA 版本是否正确?如果我认为它需要更改是对的,我也很想知道为什么这似乎可以正常工作(尽管这显然不如拥有正确的配置重要)?

当 JMS 客户端使用带有 ActiveMQ 的 XA 事务时,javax.transaction.xa.XAResource 由 ActiveMQ 客户端提供,事务管理器所使用的资源管理器由代理本身实现。代理使用的基础 JDBC 数据源是否实现 XA 是不相关的(或必需的)。

也就是说,你现在的配置没问题。