跳到主要内容
版本:4.0.2

Messaging

QWen Max 中英对照 Messaging

Spring Boot 提供了多个 starter 来支持消息传递。本节解答在使用 Spring Boot 进行消息传递时出现的一些问题。

禁用事务型 JMS 会话

如果你的 JMS broker 不支持事务会话(transacted sessions),你就必须完全禁用事务支持。如果你自己创建了 JmsListenerContainerFactory,则无需做任何操作,因为默认情况下它不会启用事务。如果你想使用 DefaultJmsListenerContainerFactoryConfigurer 来复用 Spring Boot 的默认配置,你可以按如下方式禁用事务会话:

import jakarta.jms.ConnectionFactory;

import org.springframework.boot.jms.ConnectionFactoryUnwrapper;
import org.springframework.boot.jms.autoconfigure.DefaultJmsListenerContainerFactoryConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;

@Configuration(proxyBeanMethods = false)
public class MyJmsConfiguration {

@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(ConnectionFactory connectionFactory,
DefaultJmsListenerContainerFactoryConfigurer configurer) {
DefaultJmsListenerContainerFactory listenerFactory = new DefaultJmsListenerContainerFactory();
configurer.configure(listenerFactory, ConnectionFactoryUnwrapper.unwrapCaching(connectionFactory));
listenerFactory.setTransactionManager(null);
listenerFactory.setSessionTransacted(false);
return listenerFactory;
}

}

前面的示例覆盖了默认的 factory,如果你的应用程序定义了其他 factory,也应当应用此覆盖。