-
Notifications
You must be signed in to change notification settings - Fork 102
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
IBM-MQ (ibm.mq.allclient:jar:9.2.2.0) Spring Boot dynamic listener fails with too many MQ connections with compcode '2' ('MQCC_FAILED') reason 2537 #76
Comments
Are you saying that each invocation of your Spring handles Open / Close, and if you have So the logic that you have added eg. TransactionStatus status = jmsTransactionManager.getTransaction(null); seems redundant. Have you tried without these lines? You will need to rethrow the exception you catch to allow Spring to detect it. |
Hi
Removed the transaction, still the same
Thanks
Rafi
…Sent from my iPhone
On 19 Nov 2021, at 11:02, Soheel Chughtai ***@***.***> wrote:
Are you saying that each invocation of your OnMessage method eats up a connection? If so then this is odd, as Spring should be managing these for you. If each invocation is consuming a connection then this indicates something wrong in your OnMessage.
Spring handles Open / Close, and if you have factory.setSessionTransacted(true) it will handle commit and rollback also. Commit if the method ends normally, Rollback if it throws an exception.
So the logic that you have added eg.
TransactionStatus status = jmsTransactionManager.getTransaction(null);
seems redundant. Have you tried without these lines? You will need to rethrow the exception you catch to allow Spring to detect it.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or unsubscribe.
Triage notifications on the go with GitHub Mobile for iOS or Android.
|
Please include the following information in your ticket.
Problem Statement:
We manually create the listeners for multiple queues when the system starts. What we face problem was the channel has got 10 conversations by default. Each connection takes 2 conversations and after 5 messages that channel connection is not processing any messages. We configured the 100 channels and it gets exhausted. Not sure how we can release the conversation.
for reference - https://stackoverflow.com/questions/69982367/ibm-mq-ibm-mq-allclientjar9-2-2-0-spring-boot-dynamic-listener-fails-with-to
ibmmq-jms-spring 2.4.5.
Java 1.8.0_281.
/*
Ibm-mq connection factory creation
*/
public ConnectionFactory ibmConnectionFactory() throws JMSException, MalformedURLException, FileNotFoundException {
StringBuilder sb = new StringBuilder("file:https:///");
File fileName = ResourceUtils.getFile("ibmmq-default.json");
sb.append(fileName.getAbsolutePath());
URL qCCDT = new URL(sb.toString());
MQQueueConnectionFactory mqQueueConnectionFactory = new MQQueueConnectionFactory();
mqQueueConnectionFactory.setQueueManager(queueManager);
mqQueueConnectionFactory.setAppName("APA-MQ");
mqQueueConnectionFactory.setCCDTURL(qCCDT);
return mqQueueConnectionFactory;
}
//JMS template
@primary
@bean(name="ibmJMSTemplate")
public JmsTemplate ibmJMSTemplate() throws JMSException, MalformedURLException, FileNotFoundException {
return new JmsTemplate(ibmConnectionFactory());
}
//transaction manager creation
@primary
@bean(name="ibmTM")
public JmsTransactionManager ibmJMSTransactionManager() throws JMSException, MalformedURLException, FileNotFoundException {
JmsTransactionManager jmsTransactionManager = new JmsTransactionManager();
jmsTransactionManager.setConnectionFactory(ibmJMSTemplate().getConnectionFactory());
return jmsTransactionManager;
}
//Default Listener container
@bean(name="mqJmsListenerContainerFactory")
public DefaultJmsListenerContainerFactory mqJmsListenerContainerFactory() throws JMSException {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(ibmConnectionFactory);
factory.setDestinationResolver(new DynamicDestinationResolver());
factory.setSessionTransacted(true);
factory.setConcurrency(requestConcurrency);
return factory;
}
/*
This method fetches the queue name at start of the service and configures the listener.
this will be in transaction. What we face the problem the channel has got 10 converstations by default.
each connection takes 2 conversation and after 5 messages that channel connection is not processing any messages.
we configured the 100 channels and it gets exhausted. Not sure how we can release the conversation.
*/
@OverRide
public void configureJmsListeners(JmsListenerEndpointRegistrar registrar) {
The text was updated successfully, but these errors were encountered: