首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >试图连接到远程ActiveMQ Artemis,但遇到下面提到的错误

试图连接到远程ActiveMQ Artemis,但遇到下面提到的错误
EN

Stack Overflow用户
提问于 2022-09-24 11:30:36
回答 1查看 121关注 0票数 0

我实际上得到的错误:

代码语言:javascript
运行
复制
org.springframework.jms.UncategorizedJmsException: Uncategorized exception occurred during JMS processing; nested exception is javax.jms.JMSException: Failed to create session factory; nested exception is ActiveMQNotConnectedException[errorType=NOT_CONNECTED message=AMQ219007: Cannot connect to server(s). Tried with all available servers.]
at org.springframework.jms.support.JmsUtils.convertJmsAccessException(JmsUtils.java:311)
at org.springframework.jms.support.JmsAccessor.convertJmsAccessException(JmsAccessor.java:185)
at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:507)
at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:584)
at org.springframework.jms.core.JmsTemplate.convertAndSend(JmsTemplate.java:661)
at com.cox.fst.wfm.processor.TicketProcessor.processInboundTicket(TicketProcessor.java:68)...
.
.
.
Caused by: org.springframework.jms.UncategorizedJmsException: Uncategorized exception occurred during JMS processing; nested exception is javax.jms.JMSException: Failed to create session factory; nested exception is ActiveMQNotConnectedException[errorType=NOT_CONNECTED message=AMQ219007: Cannot connect to server(s). Tried with all available servers.]
at org.springframework.jms.support.JmsUtils.convertJmsAccessException(JmsUtils.java:311)
at org.springframework.jms.support.JmsAccessor.convertJmsAccessException(JmsAccessor.java:185)
at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:507)
at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:584)
at org.springframework.jms.core.JmsTemplate.convertAndSend(JmsTemplate.java:661)
at com.cox.fst.wfm.processor.TicketProcessor.processInboundTicket(TicketProcessor.java:68)
... 108 common frames omitted
Caused by: javax.jms.JMSException: Failed to create session factory
at org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createConnectionInternal(ActiveMQConnectionFactory.java:882)
at org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:299)
at org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:294)
at org.springframework.jms.support.JmsAccessor.createConnection(JmsAccessor.java:196)
at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:494)
... 111 common frames omitted
Caused by: org.apache.activemq.artemis.api.core.ActiveMQNotConnectedException: AMQ219007: Cannot connect to server(s). Tried with all available servers.
at org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:708)
at org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createConnectionInternal(ActiveMQConnectionFactory.java:880)
... 115 common frames omitted

用于发送方的Artemis配置类中的Beans:

代码语言:javascript
运行
复制
@Bean
public ActiveMQConnectionFactory connectionFactory() {
    ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory();
    JmsDefaultPrefetchPolicy prefetchPolicy = new JmsDefaultPrefetchPolicy();
    prefetchPolicy.setQueuePrefetch(prefetch);
    return factory;
}
@Bean
public JmsTemplate jmsTemplate(final ConnectionFactory connectionFactory) {
    JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory());
    jmsTemplate.setMessageConverter(producerJackson2MessageConverter());
    jmsTemplate.setDefaultDestinationName(queue);
    return jmsTemplate;
}

@Bean
public SimpleMessageConverter producerJackson2MessageConverter() {
    return new SimpleMessageConverter();
}

用于接收者的Artemis配置类中的Beans:

代码语言:javascript
运行
复制
@Bean
public ActiveMQConnectionFactory connectionFactory() {
    ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory();
    JmsDefaultPrefetchPolicy prefetchPolicy = new JmsDefaultPrefetchPolicy();
    prefetchPolicy.setQueuePrefetch(prefetch);
    return factory;
}
@Bean
public DefaultJmsListenerContainerFactory amqpListnerFactory(final DefaultJmsListenerContainerFactoryConfigurer configurer, final ConnectionFactory connectionFactory) {
    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
    configurer.configure(factory, connectionFactory);
    factory.setSessionTransacted(false);
    factory.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
    factory.setConcurrency(concurrency);
    return factory;
}

预取、队列、并发是常量。

我的application.properties

代码语言:javascript
运行
复制
spring.artemis.embedded.enabled=false
spring.artemis.mode=native
spring.artemis.host=amqp://(service name).(namespace)
spring.artemis.port=61616
spring.artemis.user=****
spring.artemis.password=****

发送者:

代码语言:javascript
运行
复制
jmsTemplate.convertAndSend(destination,message);

在接受者中:

代码语言:javascript
运行
复制
@JmsListener(destination = "${****}", containerFactory = "amqpListnerFactory")

请帮我解决问题,请指导我如何连接远程ActiveMQ Artemis。

EN

回答 1

Stack Overflow用户

发布于 2022-09-24 22:33:49

application.properties中的这一行是有问题的:

代码语言:javascript
运行
复制
spring.artemis.host=amqp://(service name).(namespace)

这是一个URL,不是主机名。您只需要在这里指定远程ActiveMQ实例的主机名(或IP地址)。弹簧启动文件指出了这一点,例如:

代码语言:javascript
运行
复制
spring.artemis.mode=native
spring.artemis.host=192.168.1.210
spring.artemis.port=9876
spring.artemis.user=admin
spring.artemis.password=secret

更好的是,您应该转到SpringBoot3.x,转而使用broker-url属性,例如:

代码语言:javascript
运行
复制
spring.artemis.mode=native
spring.artemis.broker-url=tcp://192.168.1.210:9876
spring.artemis.user=admin
spring.artemis.password=secret

请参阅春季文献中的详细信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73836873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档