问题描述
错误:
原因: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) {
...
}