当前位置: 首页 > 知识库问答 >
问题:

听多IBMMQ使用单Spring启动应用程序

左丘善
2023-03-14

我需要侦听多个队列(存在于同一队列管理器中)。我有用于侦听单个队列的可用Spring Boot应用程序代码。但是,有没有任何方法可以从单个Spring Boot应用程序连接到多个队列?

还有,是否可以在运行时将侦听器从一个队列切换到另一个队列?

我有从单个队列读取的代码,如下所示:

public class ConnectionConfiguration {

  private static final Logger logger = LogManager.getLogger(ConnectionConfiguration.class);

  @Value("${LDR_LOCAL_MQ_READ_FACTORYNAME}")
  String connectionFactory;

  @Value("${LDR_LOCAL_MQ_QUEUENAME}")
  String localQueue;

  @Value("${jmsConcurrency}")
  String concurrency;

  @Value("${servers.mq.host}")
  private String host;

  @Value("${servers.mq.port}")
  private Integer port;

  @Value("${servers.mq.queue-manager}")
  private String queueManager;

  @Value("${servers.mq.channel}")
  private String channel;

  @Value("${servers.mq.queue}")
  private String queue;

  @Value("${servers.mq.timeout}")
  private long timeout;

  @Bean
  public ConnectionFactory connectionFactory() {

    JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
    jndiObjectFactoryBean.setResourceRef(true);
    jndiObjectFactoryBean.setJndiName(connectionFactory);
    try {
      jndiObjectFactoryBean.afterPropertiesSet();
    } catch (IllegalArgumentException e) {
      logger.error(e.getMessage(), e);
      e.printStackTrace();
    } catch (NamingException e) {
      logger.error(e.getMessage(), e);
      e.printStackTrace();
    }
    return (ConnectionFactory) jndiObjectFactoryBean.getObject();
  }

  @Bean
  public MQQueueConnectionFactory mqQueueConnectionFactory() {
    MQQueueConnectionFactory mqQueueConnectionFactory = new MQQueueConnectionFactory();
    try {
      mqQueueConnectionFactory.setHostName(host);
      mqQueueConnectionFactory.setQueueManager(queueManager);
      mqQueueConnectionFactory.setPort(port);
      mqQueueConnectionFactory.setChannel(channel);
      mqQueueConnectionFactory.setTransportType(WMQConstants.WMQ_CM_CLIENT);
      mqQueueConnectionFactory.setCCSID(1208);
    } catch (Exception e) {
      e.printStackTrace();
    }
    return mqQueueConnectionFactory;
  }

  @Bean
  public SimpleMessageListenerContainer queueContainer(MQQueueConnectionFactory mqQueueConnectionFactory) {

    SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
    container.setConnectionFactory(mqQueueConnectionFactory);
    container.setDestinationName(queue);
    container.setMessageListener(getListenerWrapper());
    container.start();
    return container;
  }

  @Bean
  public MQListener getListenerWrapper() {
    return new MQListener();
  }

  @Bean
  public JmsTemplate getJmsTemplate() {
    try {
      return new JmsTemplate(mqQueueConnectionFactory());
    } catch (Exception exp) {
      logger.error(exp.getMessage(), exp);
    }
    return null;
  }

}

共有1个答案

郑正阳
2023-03-14

只需为每个队列添加一个侦听器容器bean

要更改队列,请调用停止,然后调用关闭,更改目标,然后调用初始化,然后调用启动。

 类似资料:
  • 因此,我完成了以下步骤: > 然后提示我输入密码和其他各种信息。我像这样完成了: 在应用程序中添加了以下行。yml文件来自src/main/resources: 已启动Spring Boot应用程序。出现此异常: 其主要思想是PKCS12提供程序不存在。 有什么想法吗? 也许使用不同的提供商?如果答案是肯定的,我应该使用哪个提供商?

  • 我想对Spring数据使用ElasticSearch。我使用的是Spring 5、Spring Boot 2和ElasticSearch 7.4。Docker compose: 马文: 存储库: 配置: 和错误时启动应用程序: 引起:java.lang.NoSuchMEDError:org.springframework.http.HttpHeaders.(Lorg/springframe/uti

  • 我在intellij上启动spring boot应用程序时遇到问题,它失败了,并显示以下消息:与目标VM断开连接,地址:'127.0.0.1:49784',传输:'socket' 过程结束,退出代码为255。以前有人遇到过这种情况吗?

  • 我试图从spring主页模拟RESTful Web服务”https://spring.io/guides/gs/rest-service/". Gradle编译工作正常,但是当我运行Spring Boot时,我得到了下面的错误,我不知道是什么原因。我是Spring新手,有人能帮我吗? 我的配置详细信息包括: Windows 7 Intellij Idea 13.1.3 Java-8 Gradle-

  • 当我启动Spring Boot应用程序时,我得到了: 2020-11-11 03:02:24.333警告20648--[main]ConfigServletWebServerApplicationContext:上下文初始化过程中遇到异常-取消刷新尝试:org.springframework.beans.factory.unsatisfiedDependencyException:创建名为“org

  • 我是spring的初学者,希望这样做示例项目…我有一个数据库,我想连接到它…我使用了像AutoWired和service这样的注释。但有个问题我解决不了 Controller包中的RegisterationController具有我要调用的服务: 第一个包中的DataManagement类: 第一包中的StudentAccountRepository: 第一包中得学生帐户..引用数据库中的表: M