配置多个DefaultJmslistenercontainerfactory

use*_*483 3 spring spring-jms

在我的应用程序中,我有2个diff mq conn工厂bean.为此,我有2个diff DefaultJmslistenercontainerfactory bean ex cf1 n cf2.每个DefaultJmslistenercontainerfactory bean都在单独的@JmsListener中引用...现在我想以编程方式开始停止每个listrner,因为我重写了configureMessageListeners(JmsListenerRegistrar)方法,我可以在其中设置DefaultJmslistenercontainerfactory实例.注意我只能设置一个实例..然后在我的代码中我得到Jm​​sListenerRegistry的spring实例,我可以从中获取列表dmlc..which我可以启动n stop但是..因为我只设置了一个DefaultJmslistenercontainerfactory实例,我的代码只返回一个dmlc ..这里的问题是如何在configureJmsListener()方法中传递多个DefaultJmslistenercontainerfactory实例?注意 - 我没有手动创建dmlc ..我只是配置工厂..

Gar*_*ell 6

你为什么用configureMessageListeners()?这是针对程序化端点注册,而不是影响配置@JmsListener.

显示您的配置(编辑问题,不要尝试在评论中发布代码/配置).

这对我来说很好......

@Bean
public JmsListenerContainerFactory<DefaultMessageListenerContainer> one(
        @Qualifier("jmsConnectionFactory1") ConnectionFactory cf) {
    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
    factory.setConnectionFactory(cf);
    return factory;
}

@Bean
public JmsListenerContainerFactory<DefaultMessageListenerContainer> two(
        @Qualifier("jmsConnectionFactory2") ConnectionFactory cf) {
    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
    factory.setConnectionFactory(cf);
    return factory;
}

@JmsListener(id="fooListener", destination="foo", containerFactory="one")
public void listen1(String payload) {
    System.out.println(payload + "foo");
}

@JmsListener(id="barListener", destination="bar", containerFactory="two")
public void listen2(String payload) {
    System.out.println(payload + "bar");
}
Run Code Online (Sandbox Code Playgroud)

...

@Autowired
JmsListenerEndpointRegistry registry;
Run Code Online (Sandbox Code Playgroud)

...

MessageListenerContainer fooContainer = registry.getListenerContainer("fooListener");
MessageListenerContainer barContainer = registry.getListenerContainer("barListener");
Run Code Online (Sandbox Code Playgroud)

您还可以使用registry.getListenerContainers()获取集合.

我以为我在回答你的另一个问题时解释了这一切.