Spring 手动启动MessageListenerContainer会阻止其他侦听器启动-为什么?

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

我的spring boot应用程序有几个用
@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
是在
环境更改事件
被触发时触发的。你的建议是完全不可能的-还必须更改其他内容。我建议您比较使用和不使用事件侦听器的调试日志。如果你仍然不明白;编辑问题以包含完整配置和/或再现问题的小应用程序。