我希望我的Spring Boot应用程序启动,无论它是否可以连接到JMS。我有这个最小的例子:
@SpringBootApplication
@EnableJms
public class JmsActivemqFailoverApplication {
public static void main(String[] args) {
SpringApplication.run(JmsActivemqFailoverApplication.class, args);
}
@Component
public static class JmsReceiver {
@JmsListener(destination = "inbox")
public void receive(Message message) {
System.out.println("Received <" + message + ">");
}
}
@RestController
public static class HelloWorldController {
@GetMapping("/")
public String helloWorld() {
return "Hello world";
}
}
}
application.properties
包含以下内容:
spring.activemq.broker-url=tcp://non-existing-broker:61616
我可以从helloWorld
端点获得响应。当我将属性更改为:
spring.activemq.broker-url=failover:(tcp://non-existing-broker:61616)
应用程序一直尝试连接到代理,但是我无法从REST端点获得响应。
请告知,如何在不等待ActiveMQ故障转移传输成功的情况下运行应用程序。
获得答案 0 :(得分:1)
实现此目标的一种方法是:
spring.jms.listener.auto-startup=false
禁用JMS容器自动启动在应用程序启动后启动JMS容器:
@Component
public class JmsStarter implements ApplicationRunner {
private final JmsListenerEndpointRegistry jmsRegistry;
public JmsStarter(JmsListenerEndpointRegistry jmsRegistry) {
this.jmsRegistry = jmsRegistry;
}
@Override
public void run(ApplicationArguments args) {
for (MessageListenerContainer listenerContainer : jmsRegistry.getListenerContainers()) {
listenerContainer.start();
}
}
}