mq-jms-spring icon indicating copy to clipboard operation
mq-jms-spring copied to clipboard

JMSCC0111 for simple application with two topic listener and without JMS cache

Open bjpe opened this issue 3 years ago • 1 comments

Hi everyone,

I have a Java application using Spring Boot 2.6.3 and mq-jms-spring-boot-starter in version 2.6.3 which subscribes to two durable topics using @JmsListener. When I disable the JMS cache, I get the following exception every 5 seconds:

Could not refresh JMS Connection for destination 'topic1' - retrying using FixedBackOff{interval=5000, currentAttempts=1, maxAttempts=unlimited}. Cause: JMSCC0111: IBM MQ classes for JMS attempted to set a pre-existing client ID on a Connection or JMSContext.

A minimal working example can be found at https://github.com/bjpe/jms-mq-jmscc0111, the application is running against a local MQ started in Docker via

docker run --env LICENSE=accept --env MQ_QMGR_NAME=QM1 --env MQ_APP_PASSWORD=passw0rd --publish 1414:1414 --publish 9443:9443 ibmcom/mq:9.1.5.0-r1

If I either enable com.ibm.mq.jms.SupportMQExtensions or spring.jms-cache, then the exception is not thrown.

Is this a bug or am I missing something here? I would be glad for any help.

Kind Regards, Björn

bjpe avatar Feb 16 '22 15:02 bjpe

The MQ documentation describes that property and how the clientid would normally need to be unique on connections for a standards-compliant program.

Your config yaml file contains a clientid, so that is going to be set on all connections - which breaks the JMS rules, but the MQExtensions property allows you to go ahead anyway. I don't know why turning on caching also gets round it but perhaps it's reduced the number of connections that are getting made.

ibmmqmet avatar Feb 17 '22 08:02 ibmmqmet