我正在尝试将spring应用程序设置为侦听JMS队列。 我尝试在我的application.yml中设置broker-url,但似乎总是默认返回到“ localhost:61616”。 从另一个应用程序加载了application.yml文件,但是我认为这并不重要,因为读取了文件中的其他属性(例如队列的名称)
这是我收到的消息:
o.a.a.t.failover.FailoverTransport;Failed to connect to [tcp://localhost:61616] after: 40 attempt(s) continuing to retry.
我尝试过的事情
我已经尝试遵循以下问题的答案:Camel ActiveMQ + Spring boot not reading spring activemq configurations 这是我的确切问题
但是当我尝试添加依赖项并创建该类时,出现此错误:
Parameter 0 of method createComponent in xxx.xxxxx.xxxx.configuration.ActiveMQComponentConfig required a bean of type 'javax.jms.ConnectionFactory' that could not be found.
我对Spring boot / ActiveMQ还是很陌生,真的不知道该怎么办。
这是我pom.xml的相关部分
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath />
</parent>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring-boot-starter</artifactId>
<version>${camel.version}</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-camel</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-broker</artifactId>
</exclusion>
</exclusions>
</dependency>
还有我的application.yml:
spring:
aop:
proxy-target-class: true
cache:
ehcache:
config: classpath:ehcache.xml
activemq:
broker-url: tcp://foo:12345
pool:
enabled: true
max-connections: 5
任何帮助将不胜感激,我已经花了很多时间在此上并且没有取得任何进展
答案 0 :(得分:1)
这就是我最终使它重新工作的结果。我仍然不知道为什么Spring的autoconfig停止工作,但是解决了
@Configuration
public class JmsConfig {
@Value("${spring.activemq.broker-url}")
String BROKER_URL;
@Value("${spring.activemq.user}")
String BROKER_USERNAME;
@Value("${spring.activemq.password}")
String BROKER_PASSWORD;
@Bean
public ActiveMQConnectionFactory connectionFactory(){
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
connectionFactory.setBrokerURL(BROKER_URL);
connectionFactory.setUserName(BROKER_USERNAME);
connectionFactory.setPassword(BROKER_PASSWORD);
return connectionFactory;
}
@Bean
public JmsTemplate jmsTemplate(){
JmsTemplate template = new JmsTemplate();
template.setConnectionFactory(connectionFactory());
return template;
}
@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory() {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory());
factory.setConcurrency("1-1");
return factory;
}
}