MQQueueConnectionFactory 和 MQXAQueueConnectionFactory 之间的区别
Difference between MQQueueConnectionFactory and MQXAQueueConnectionFactory
如果我只想在 Spring 引导中阅读@JmsListener 的消息,有人可以解释我应该使用 MQXAQueueConnectionFactory 吗?
我用 MQXAQueueConnectionFactory 和 MQQueueConnectionFactory 读取了消息,但我看不出有什么区别。如果我在侦听器方法中做出例外,我会看到该消息一次又一次地传递。
此时,对于 DefaultJmsListenerContainerFactory,setSessionTransacted 设置为 true,setTransactionManager 设置为 null:
public void configure(DefaultJmsListenerContainerFactory factory,
ConnectionFactory connectionFactory) {
Assert.notNull(factory, "Factory must not be null");
Assert.notNull(connectionFactory, "ConnectionFactory must not be null");
factory.setConnectionFactory(connectionFactory);
factory.setPubSubDomain(this.jmsProperties.isPubSubDomain());
if (this.transactionManager != null) {
factory.setTransactionManager(this.transactionManager); // null
}
else {
factory.setSessionTransacted(true);
}
...
顾名思义,MQXAQueueConnectionFactory
在处理 XA 事务时使用。从技术上讲,MQXAQueueConnectionFactory
实现了 javax.jms.XAConnectionFactory
which ultimately provides access to the other XA-related connection, context, session, and resource 接口。通常,这些将由底层框架(例如 Java EE 或 Spring)与事务管理器一起使用,以协调多个资源管理器(例如 JMS 提供程序和 JDBC 之间的 XA 事务数据库)。
由于您不使用 XA 事务,因此您应该只使用 MQQueueConnectionFactory
。
明确地说,XA 事务不同于事务处理的 JMS 会话(这是您配置的内容)。
如果我只想在 Spring 引导中阅读@JmsListener 的消息,有人可以解释我应该使用 MQXAQueueConnectionFactory 吗?
我用 MQXAQueueConnectionFactory 和 MQQueueConnectionFactory 读取了消息,但我看不出有什么区别。如果我在侦听器方法中做出例外,我会看到该消息一次又一次地传递。
此时,对于 DefaultJmsListenerContainerFactory,setSessionTransacted 设置为 true,setTransactionManager 设置为 null:
public void configure(DefaultJmsListenerContainerFactory factory,
ConnectionFactory connectionFactory) {
Assert.notNull(factory, "Factory must not be null");
Assert.notNull(connectionFactory, "ConnectionFactory must not be null");
factory.setConnectionFactory(connectionFactory);
factory.setPubSubDomain(this.jmsProperties.isPubSubDomain());
if (this.transactionManager != null) {
factory.setTransactionManager(this.transactionManager); // null
}
else {
factory.setSessionTransacted(true);
}
...
顾名思义,MQXAQueueConnectionFactory
在处理 XA 事务时使用。从技术上讲,MQXAQueueConnectionFactory
实现了 javax.jms.XAConnectionFactory
which ultimately provides access to the other XA-related connection, context, session, and resource 接口。通常,这些将由底层框架(例如 Java EE 或 Spring)与事务管理器一起使用,以协调多个资源管理器(例如 JMS 提供程序和 JDBC 之间的 XA 事务数据库)。
由于您不使用 XA 事务,因此您应该只使用 MQQueueConnectionFactory
。
明确地说,XA 事务不同于事务处理的 JMS 会话(这是您配置的内容)。