我实际上得到的错误:
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:
@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:
@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
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=****
发送者:
jmsTemplate.convertAndSend(destination,message);
在接受者中:
@JmsListener(destination = "${****}", containerFactory = "amqpListnerFactory")
请帮我解决问题,请指导我如何连接远程ActiveMQ Artemis。
发布于 2022-09-24 22:33:49
application.properties
中的这一行是有问题的:
spring.artemis.host=amqp://(service name).(namespace)
这是一个URL,不是主机名。您只需要在这里指定远程ActiveMQ实例的主机名(或IP地址)。弹簧启动文件指出了这一点,例如:
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
属性,例如:
spring.artemis.mode=native
spring.artemis.broker-url=tcp://192.168.1.210:9876
spring.artemis.user=admin
spring.artemis.password=secret
请参阅春季文献中的详细信息。
https://stackoverflow.com/questions/73836873
复制相似问题