更新到spring Boot 3后Jms不工作(以及从javax到jakarta的ConnectionFactory)

nqwrtyyt  于 2023-06-04  发布在  Java
关注(0)|答案(1)|浏览(406)

从SpringBoot v.2.5.5更新到v3.1.0后,需要将ConnectionFactoryjavax.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;
    }

}
tyky79it

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

相关问题