从SpringBoot v.2.5.5更新到v3.1.0后,需要将ConnectionFactory
从javax.jms.ConnectionFactory
更新为jakarta.jms.ConnectionFactory
。我没有改变任何东西。现在我得到了这样的错误:ERROR - Could not refresh JMS Connection for destination 'tServerEvent' - retrying using FixedBackOff{interval=5000, currentAttempts=0, maxAttempts=unlimited}. Cause: Could not connect to broker URL: tcp://localhost:61616. Reason: java.net.ConnectException: Connection refused: no further information
我调查了它,并与旧的javax.ConnectionFactory
进行了比较,似乎它们的默认brokerUrl
是不同的
对于javax.jms.ConnectionFactory
,它是:vm://localhost?broker.persistent=false
对于jakarta.jms.ConnectionFactory
,它是:tcp://localhost:61616
即使我手动设置broker url,像这样:
spring:
activemq:
broker-url: vm://localhost?broker.persistent=false
它仍然不工作,错误是:Cause: Could not create Transport. Reason: java.io.IOException: Transport scheme NOT recognized: [vm]
我不知道为什么jakarta.ConnectionFactory和旧的javax.ConnectionFactory的默认brokerUrl不同,也不知道如何成功运行我的应用程序。如果你能给我一些建议,我将不胜感激。
下面是使用ConnectionFactory的JmsListenerContainerFacroty
Bean的代码:
import jakarta.jms.ConnectionFactory;
import org.springframework.boot.autoconfigure.jms.DefaultJmsListenerContainerFactoryConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.config.JmsListenerContainerFactory;
@Configuration
@EnableJms
public class JmsConfig {
@Bean
public JmsListenerContainerFactory<?> myFactory(ConnectionFactory connectionFactory, DefaultJmsListenerContainerFactoryConfigurer configurer) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
configurer.configure(factory, connectionFactory);
return factory;
}
}
1条答案
按热度按时间tyky79it1#
在Sping Boot 3.0中删除了对ActiveMQ的支持,因为它不支持JMS 3.0(
jakarta.jms.*
API)。Sping Boot 3.1恢复了对自动配置ActiveMQ客户端的支持。嵌入式代理支持尚未恢复,因为ActiveMQ的代理还不支持JMS 3.0。要在Sping Boot 3.1中使用ActiveMQ,您必须使用外部代理作为Spring Boot's ActiveMQ smoke test does。