我希望我的 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 故障转移传输成功的情况下运行应用程序。
最佳答案
实现此目的的一种方法是:
- 使用属性
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(); } } }
关于java - 当 ActiveMQ 故障转移传输失败时,Spring Boot 应用程序不会启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51707799/