软件开发javaMQjms

IBM MQ 一个queueManager下是不是只能连接一个channel?

如题,

//*START=====================================CHANNEL=====================================START*//

/*********************
 *    配置连接工厂   *
 *********************/
@Bean(name = "bidsMqQueueConnectionFactory")
public MQQueueConnectionFactory bidsMqQueueConnectionFactory(
        @Value("${ibm.mq.host}") String host,
        @Value("${ibm.mq.port}") Integer port,
        @Value("${ibm.mq.ccsid}") Integer ccsid,
        @Value("${ibm.mq.channel.jids}") String channel,
        @Value("${ibm.mq.queue.manager}") String queueManager
) {
    MQQueueConnectionFactory mqQueueConnectionFactory = new MQQueueConnectionFactory();
    mqQueueConnectionFactory.setHostName(host);
    try {
        mqQueueConnectionFactory.setTransportType(CommonConstants.WMQ_CM_CLIENT);
        mqQueueConnectionFactory.setCCSID(ccsid);
        mqQueueConnectionFactory.setChannel(channel);
        mqQueueConnectionFactory.setPort(port);
        mqQueueConnectionFactory.setQueueManager(queueManager);
    } catch (Exception e) {
        log.error("创建卷烟智能制造ESB连接工厂异常,原因:", e);
    }
    return mqQueueConnectionFactory;
}

/****************************************************************************************************************
 *    配置连接认证                                                                                                                                            *
 *    如不需要账户密码链接可以跳过此步,直接将MqQueueConnectionFactory注入下一步的缓存连接工厂   *
 ****************************************************************************************************************/
@Bean(name = "bidsUserCredentialsConnectionFactoryAdapter")
UserCredentialsConnectionFactoryAdapter bidsUserCredentialsConnectionFactoryAdapter(
        // @Value("${spring.ibmmq.bids.username}") String username,
        // @Value("${spring.ibmmq.bids.password}") String password,
        @Qualifier("bidsMqQueueConnectionFactory") MQQueueConnectionFactory mqQueueConnectionFactory
) {
    UserCredentialsConnectionFactoryAdapter userCredentialsConnectionFactoryAdapter = new UserCredentialsConnectionFactoryAdapter();
    //  userCredentialsConnectionFactoryAdapter.setUsername(username);
    //  userCredentialsConnectionFactoryAdapter.setPassword(password);
    userCredentialsConnectionFactoryAdapter.setTargetConnectionFactory(mqQueueConnectionFactory);
    return userCredentialsConnectionFactoryAdapter;
}

/**************************************************************************
 *    配置缓存连接工厂:                                                                           *
 *    不配置该类则每次与MQ交互都需要重新创建连接,大幅降低速度   *
 **************************************************************************/
@Bean(name = "bidsCachingConnectionFactory")
@Primary
public CachingConnectionFactory bidsCachingConnectionFactory(
        @Qualifier("bidsUserCredentialsConnectionFactoryAdapter") UserCredentialsConnectionFactoryAdapter userCredentialsConnectionFactoryAdapter) {
    CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory();
    cachingConnectionFactory.setTargetConnectionFactory(userCredentialsConnectionFactoryAdapter);
    cachingConnectionFactory.setSessionCacheSize(500);
    cachingConnectionFactory.setReconnectOnException(true);
    return cachingConnectionFactory;
}

/**********************************************************************************************************
 *    配置DefaultJmsListenerContainerFactory,用@JmsListener注解来监听队列消息时候                    *
 *    尤其存在多个监听的时候,通过实例化配置DefaultJmsListenerContainerFactory来控制消息分发    *
 *    如果只有一个连接工厂,即可跳过此步骤,因为默认会创建一个监听容器工厂                                       *
 **********************************************************************************************************/
@Bean(name = "bidsJmsQueueListenerContainerFactory")
@Primary
public DefaultJmsListenerContainerFactory bidsJmsQueueListenerContainerFactory(
        @Qualifier("bidsCachingConnectionFactory") CachingConnectionFactory cachingConnectionFactory
) {
    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
    factory.setConnectionFactory(cachingConnectionFactory);
    //设置连接数
    factory.setConcurrency("3-10");
    //重连间隔时间
    factory.setRecoveryInterval(1000L);
    return factory;
}

/**********************************************************************************************************************
 *    配置JMS模板:可以在方法中通过@autowired的方式注入模板                                                                            *
 *    JmsOperations为JmsTemplate的实现接口                                                                                                       *
 *    重要: 不设置setReceiveTimeout时,当队列为空,从队列中取出消息的方法将会一直挂起直到队列内有消息     *
 *    如果只是接收消息,可以不配置此步                                                                                                                   *
 **********************************************************************************************************************/
@Bean(name = "bidsJmsOperations")
public JmsOperations bidsJmsOperations(
        @Value("${ibm.mq.timeout}") Integer receiveTimeout,
        @Qualifier("bidsCachingConnectionFactory") CachingConnectionFactory cachingConnectionFactory) {
    JmsTemplate jmsTemplate = new JmsTemplate(cachingConnectionFactory);
    jmsTemplate.setReceiveTimeout(receiveTimeout);
    return jmsTemplate;
}

//*END======================================CHANNEL======================================END*//

我只配置了一个就正常启动,但是当我配置第二个同queueManager下不同channel时,就会在启动时报错

因为不是对IBMMQ特别了解,所以想请教一下。
谢谢。

参与3

1同行回答

zftangzftang其它小白一枚
单节点模式下,一个queueManager只能连接一个channel显示全部

单节点模式下,一个queueManager只能连接一个channel

收起
互联网服务 · 2023-03-02
浏览364

提问者

augustusTWT
JAVA后端AAAAA

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2021-11-04
  • 关注会员:2 人
  • 问题浏览:1054
  • 最近回答:2023-03-02
  • X社区推广