以下配置创建了一个 MessageListenerContainer
一边 ConnectionFactory
.
@Configuration
public class MyConfig {
@Bean
public MessageListenerContainer myListenerContainer() {
DefaultMessageListenerContainer messageListenerContainer = new DefaultMessageListenerContainer();
messageListenerContainer.setConnectionFactory(myConnectionFactory1);
[...]
return messageListenerContainer;
}
}
我想创建相同配置的 MessageListenerContainer
但有不同 ConnectionFactory
(指向不同的队列管理器)。
我试图返回一个列表 MessageListenerContainer
(MessageListenerContainer[]
或 List<MessageListenerContainer>
有无 @Qualifier
)但新的消息被忽略。
我如何管理 MessageListenerContainer
创作 ConnectionFactory
?
还有另一种方法来创建多个 MessageListenerContainer
,而不是创建 MessageListenerContainer
你创建多个 JmsListenerContainerFactory
并将bean名称设置在 JmsListener
.
@EnableJms
class JmsConfiguration{
Bean
public JmsListenerContainerFactory jmsListenerContainerFactory(){
// create jms listener
}
@Bean
public JmsListenerContainerFactory jmsListenerContainerFactory2(){
// create jms listener
}
}
在这里创建了两个厂豆。jmsListenerContainerFactory
和 jmsListenerContainerFactory2
现在,你可以使用这些工厂的豆子在 JmsListener
来表示要使用的Bean。
@Component
class JmsListeners {
@JmsListener(containerFactory="jmsListenerContainerFactory")
public void onMessage(...){
}
@JmsListener(containerFactory="jmsListenerContainerFactory2")
public void onMessage2(...){
}
}
你可以在应用程序上下文中动态地注册Bean。
@Component
class Configurer {
Configurer (GenericApplicationContext context) {
for (i = 0; ...) {
ConnectionFactory cf = ...
context.registerBean("cf" + i, ConnectionFactory.class, () -> cf);
context.getBean("cf" + i); // to initialize it
DefaultMessageListenerContainer container = ...
context.registerBean("container" + i, ...);
context.getBean("container" + i, ...
}
}
}