Ibm mq 在JMS负载平衡环境中使用连接名称列表

Ibm mq 在JMS负载平衡环境中使用连接名称列表,ibm-mq,spring-jms,Ibm Mq,Spring Jms,我们的JMS基础架构是负载平衡的。因此,我试图在配置连接工厂时使用connectionNameList。这里的想法是,到达主队列管理器或辅助队列管理器的任何JMS消息都将被拾取和处理。但是,似乎只有主服务器正在接收消息 以下是我的侦听器注释: @JmsListener(destination = "${request-queue}", containerFactory = "DefaultJmsListenerContainerFactory") public void onMessage(Me

我们的JMS基础架构是负载平衡的。因此,我试图在配置连接工厂时使用connectionNameList。这里的想法是,到达主队列管理器或辅助队列管理器的任何JMS消息都将被拾取和处理。但是,似乎只有主服务器正在接收消息

以下是我的侦听器注释:

@JmsListener(destination = "${request-queue}", containerFactory = "DefaultJmsListenerContainerFactory")
public void onMessage(Message msg) {
    System.out.println(msg.toString());
}
以下是JMS侦听器容器工厂:

@Bean(name = "DefaultJmsListenerContainerFactory")
public DefaultJmsListenerContainerFactory createJmsListenerContainerFactory() {
    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();

    factory.setConnectionFactory(buildConnectionFactory());
    factory.setConcurrency(numberOfListeners);
    factory.setSessionAcknowledgeMode(Session.AUTO_ACKNOWLEDGE);
    factory.setSessionTransacted(false);
    factory.setErrorHandler(queueErrorHandler);
    factory.setBackOff(getBackOffStrategy());

    return factory;
}
这里是连接工厂:

@Bean(name = "MQConnectionFactory")
public ConnectionFactory buildConnectionFactory() {

    try {
        MQConnectionFactory mqcf = new MQConnectionFactory();
        mqcf.setConnectionNameList(mq1.daluga.com(2171),mq2.daluga.com(2171));
        mqcf.setChannel(channel);
        mqcf.setTransportType(WMQConstants.WMQ_CM_CLIENT);
        return mqcf;
    } catch (Exception e) {
        throw new RuntimeException(message, e);
    }
}
我怀疑我的配置有问题。是否有任何明显的情况会导致无法从辅助队列管理器中拾取消息


谢谢

将从左到右尝试setConnectionNameList中列出的连接。仅当第一个conname不可用时,才能连接到第二个conname。要执行您正在查看的操作,您可以查看IBM MQ CCDT或在MQ服务器前面放置硬件负载平衡器(例如:F5 LTM)。与CCDT相关,您可以创建一个CCDT,其中包含指向每个队列管理器的通道(请注意,每个队列管理器上的通道名称必须不同)所有通道上的
QMNAME
都是相同的,然后您在程序中将其引用为
*QMNAME
,这表明它是一组要查找的通道。在CCDT中,你可以设置相等的权重,也可以设置某些内容的优先级。另外两个答案提供了一些CCDT信息:谢谢,@JoshMc。谢谢你帮我理解这一点。我的印象是,这是为了负载平衡而实现的,而我认为连接名称列表的原因实际上只是故障转移。Dan如果您愿意接受,并且觉得它可能对其他人有帮助,我可以用上面评论中的信息写一个快速回答。