我正在使用Spring JMS使用IBM MQ主题中的事件当我将应用程序相同的工件部署到多个吊舱中时,出现以下错误

问题描述

错误

原因:JMSCC0111:JMS的WebSphere MQ类试图在Connection或JMSContext上设置预先存在的客户机ID。

它是耐用的消费者。我了解到,有多个消费者尝试使用相同的clientID进行消费时,会出现此错误。但是我的要求是同一主题必须有多个消费者。相同的事件不应同时由两个使用者使用。

解决方法

与评论相关的代码变为:


import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.config.JmsListenerContainerFactory;
import org.springframework.jms.connection.SingleConnectionFactory;

    @Bean
    public JmsListenerContainerFactory<?> myPubSubContainerFactory(SingleConnectionFactory scf) {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();

        scf.setClientId("ABCD");;
        factory.setConnectionFactory(scf);

        factory.setPubSubDomain(true);  // sub
        factory.setSubscriptionDurable(true);
        factory.setSubscriptionShared(true);

        return factory;
    }

注意使用 SingleConnectionFactory 来设置 ClientID。如果您在 DefaultJmsListenerContainerFactory 工厂上设置它,您将收到一条错误消息,告诉您将其设置在 SingleConnectionFactory 上。

监听器是:

    @JmsListener(destination = "${topic.value}",containerFactory = "myPubSubContainerFactory")
    public void subscribe(String message) {
       ...
    }