如何在ConnectionFactory列表上创建JMS MessageListenerContainer?

问题描述 投票:0回答:1

以下配置创建了一个 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?

spring spring-jms
1个回答
0
投票

还有另一种方法来创建多个 MessageListenerContainer,而不是创建 MessageListenerContainer 你创建多个 JmsListenerContainerFactory 并将bean名称设置在 JmsListener.

@EnableJms
class JmsConfiguration{

 Bean
 public JmsListenerContainerFactory  jmsListenerContainerFactory(){
     // create jms listener 
 }

 @Bean
 public JmsListenerContainerFactory  jmsListenerContainerFactory2(){
     // create jms listener 
 }

}

在这里创建了两个厂豆。jmsListenerContainerFactoryjmsListenerContainerFactory2现在,你可以使用这些工厂的豆子在 JmsListener 来表示要使用的Bean。

@Component
class JmsListeners {
  @JmsListener(containerFactory="jmsListenerContainerFactory")
  public void onMessage(...){

  }

  @JmsListener(containerFactory="jmsListenerContainerFactory2")
  public void onMessage2(...){

  }
}

0
投票

你可以在应用程序上下文中动态地注册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, ...
        }
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.