我有一个bean来启动一些amqp消费者。
这个bean在@Configuration
类的构造函数中注册并初始化,如下所示:
@Autowired
ApplicationContext applicationContext
...
ConfigurableListableBeanFactory beanFactory = ((ConfigurableApplicationContext) applicationContext).getBeanFactory();
beanFactory.registerSingleton(consumingIntegrationBeanName, consumingIntegration);
beanFactory.initializeBean(consumingIntegration, consumingIntegrationBeanName);
但是,执行此操作时启动的使用者进程依赖于在单独进程中同时启动的api。
我正在考虑做这样的事情:
while (!isInitialized) {
Response response = httpClient.isAlive(http://api-in-separate-process/);
if (response.status == 200) {
beanFactory.initializeBean(consumingIntegration, consumingIntegrationBeanName);
isInitialized = true;
} else {
wait 10
}
}
但是哪里会有这样的东西?应用程序的其余部分不应受此特定bean的延迟启动的影响。
答案 0 :(得分:1)
我要做的是以下事情:当“api-in-separate-process”完全启动时,我生成一种消息(例如JMS消息)。在另一个spring上下文中(应该启动使用者)我在生成的消息上放置一个监听器(例如前一句中的JMS消息)。
此侦听器在收到消息(例如JMS消息)时启动消费者
安吉洛