跳到主要内容

消息传递

DeepSeek V3 中英对照 Messaging

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

禁用事务性 JMS 会话

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

import jakarta.jms.ConnectionFactory;

import org.springframework.boot.autoconfigure.jms.DefaultJmsListenerContainerFactoryConfigurer;
import org.springframework.boot.jms.ConnectionFactoryUnwrapper;
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;
}

}
java

在上述示例中,我们重写了默认的工厂方法,并且如果应用程序中定义了其他工厂方法,也应将其应用其中。