配置多个 DefaultJmslistenercontainerfactory
Configuring multiple DefaultJmslistenercontainerfactory
在我的应用程序中,我有 2 个 diff mq conn 工厂 bean。为此,我有 2 个差异 DefaultJmslistenercontainerfactory beans ex cf1 n cf2。每个 DefaultJmslistenercontainerfactory bean 在单独的 @JmsListener 中被引用。 ..现在我想以编程方式开始停止每个 listrner,因为我正在覆盖 configureMessageListeners(JmsListenerRegistrar) 方法,我可以在其中设置 DefaultJmslistenercontainerfactory 实例。注意我只能设置一个实例..
然后在我的代码中我得到 JmsListenerRegistry 的 spring 实例,从中我可以得到列表 dmlc..我可以开始 n 停止
然而。 .因为我只设置了一个 DefaultJmslistenercontainerfactory 实例,我的代码 returns 只有一个 dmlc..
这里的问题是如何在 configureJmsListener() 方法中传递多个 DefaultJmslistenercontainerfactory 实例?
注意-我没有手动创建 dmlc..我只是配置工厂..
为什么要使用 configureMessageListeners()
?那是为了编程端点注册,不影响 @JmsListener
.
的配置
显示你的配置(编辑问题,不要在评论中尝试post code/config).
这对我来说很好...
@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");
}
...
@Autowired
JmsListenerEndpointRegistry registry;
...
MessageListenerContainer fooContainer = registry.getListenerContainer("fooListener");
MessageListenerContainer barContainer = registry.getListenerContainer("barListener");
您也可以使用 registry.getListenerContainers()
获得 collection。
我以为我在 my answer to your other question 中解释了所有这些。
在我的应用程序中,我有 2 个 diff mq conn 工厂 bean。为此,我有 2 个差异 DefaultJmslistenercontainerfactory beans ex cf1 n cf2。每个 DefaultJmslistenercontainerfactory bean 在单独的 @JmsListener 中被引用。 ..现在我想以编程方式开始停止每个 listrner,因为我正在覆盖 configureMessageListeners(JmsListenerRegistrar) 方法,我可以在其中设置 DefaultJmslistenercontainerfactory 实例。注意我只能设置一个实例.. 然后在我的代码中我得到 JmsListenerRegistry 的 spring 实例,从中我可以得到列表 dmlc..我可以开始 n 停止 然而。 .因为我只设置了一个 DefaultJmslistenercontainerfactory 实例,我的代码 returns 只有一个 dmlc.. 这里的问题是如何在 configureJmsListener() 方法中传递多个 DefaultJmslistenercontainerfactory 实例? 注意-我没有手动创建 dmlc..我只是配置工厂..
为什么要使用 configureMessageListeners()
?那是为了编程端点注册,不影响 @JmsListener
.
显示你的配置(编辑问题,不要在评论中尝试post code/config).
这对我来说很好...
@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");
}
...
@Autowired
JmsListenerEndpointRegistry registry;
...
MessageListenerContainer fooContainer = registry.getListenerContainer("fooListener");
MessageListenerContainer barContainer = registry.getListenerContainer("barListener");
您也可以使用 registry.getListenerContainers()
获得 collection。
我以为我在 my answer to your other question 中解释了所有这些。