Spring 手动启动MessageListenerContainer会阻止其他侦听器启动-为什么?
我的spring boot应用程序有几个用Spring 手动启动MessageListenerContainer会阻止其他侦听器启动-为什么?,spring,spring-boot,spring-amqp,Spring,Spring Boot,Spring Amqp,我的spring boot应用程序有几个用@RabbitListener注释的方法。当应用程序启动时,相应的使用者将向RabbitMQ注册 当我向代码中添加以下方法时,仅注册给定侦听器(idOfMySpecialListener)的使用者,而不注册所有其他使用者 @EventListener public void onEnvironmentChangeEvent(EnvironmentChangeEvent event) { MessageListenerContainer list
@RabbitListener
注释的方法。当应用程序启动时,相应的使用者将向RabbitMQ注册
当我向代码中添加以下方法时,仅注册给定侦听器(idOfMySpecialListener
)的使用者,而不注册所有其他使用者
@EventListener
public void onEnvironmentChangeEvent(EnvironmentChangeEvent event) {
MessageListenerContainer listenerContainer = rabbitListenerEndpointRegistry.getListenerContainer("idOfMySpecialListener");
listenerContainer.start();
}
为什么会这样?如何更改行为以启动所有侦听器(如没有@EventListener
),以及尚未启动的特定侦听器
背景:我不想基于属性值更改来启动/停止
@RabbitListener
。如何防止该侦听器启动?仅添加这样的侦听器不会影响autoStartup
。您能否交叉检查此方法是在使用@Rabbitlistener
@GaryRussell注释的方法之前还是之后触发的?不知怎的,添加listenerContainer.start()
会导致所有其他侦听器(受该方法影响的侦听器除外)都无法启动。如果删除这一行,则所有侦听器都将成功启动。我这么问是因为我不明白为什么会发生这种事。@pvpkiran我不太明白你的意思,对不起。据我所知,@RabbitListener
是在消息到达队列时触发的,而@EventListener
是在环境更改事件
被触发时触发的。你的建议是完全不可能的-还必须更改其他内容。我建议您比较使用和不使用事件侦听器的调试日志。如果你仍然不明白;编辑问题以包含您的完整配置和/或复制问题的小应用程序。您如何阻止该侦听器启动?仅添加这样的侦听器不会影响autoStartup
。您能否交叉检查此方法是在使用@Rabbitlistener
@GaryRussell注释的方法之前还是之后触发的?不知怎的,添加listenerContainer.start()
会导致所有其他侦听器(受该方法影响的侦听器除外)都无法启动。如果删除这一行,则所有侦听器都将成功启动。我这么问是因为我不明白为什么会发生这种事。@pvpkiran我不太明白你的意思,对不起。据我所知,@RabbitListener
是在消息到达队列时触发的,而@EventListener
是在环境更改事件
被触发时触发的。你的建议是完全不可能的-还必须更改其他内容。我建议您比较使用和不使用事件侦听器的调试日志。如果你仍然不明白;编辑问题以包含完整配置和/或再现问题的小应用程序。