Multiple processes serving a single subscription call MQRC_SUBSCRIPTION_IN_USE

I have a TIBCO BusinessWorks process that is published in a JMS topic - lets call it TOPIC.A - there is one process that subscribes to this topic with the name SUBSCRIBE.A.

The problem is that the first server that starts listening on SUBSCRIBE. On the remaining 3 servers running the exact same process, the error "WebSphere MQ call failed with compilation code" 2 "(" MQCC_FAILED ")" 2429 "(" MQRC_SUBSCRIPTION_IN_USE ")"

This may not be reasonable behavior for enterprise software, and I know that WebsphereMQ, JMS, and TIBCO Businessworks all scale well, so I am missing something. I want each event to be processed once, but one block is simply not going to do this, both for the reasons for the failure and for explaining the reasons for the failure.

What do I need to do so that all 4 servers in the cluster serve the SUBSCRIBE.A subscription?

+4
source share
2 answers

I agree that this does not seem to be reasonable behavior for enterprise software, but this limitation is imposed by the JMS specification. The JMS 1.1 specification, section 6.66.1 states: "Only one session at a time can have TopicSubscriber for a specific long-term subscription."

However, WebSphere MQ provides a special parameter that allows you to do what you want: see the CLONESUPP Connection Factory property. This is described in the Infocenter on the CLONESUPP properties page.

While it is specific to MQ, if you specify this using managed objects, you will not need to use any provider specific methods.

+3
source

The reason the MQRC 2429 is because all of your 4 subscribers use the same customer ID, and everyone is trying to use the same solid subscription. When a subscriber is already actively listening to a long-term subscription, no other subscriber can listen to it. If you want all subscribers to listen at the same time, you have separate customer identifiers for each of your subscribers.

But you should note that all subscribers will receive a copy of the same message published by the publisher (TIBCO BusinessWorks in your case). Therefore, if all subscribers are active, everyone will process the event.

In the event of a failure, you can see the use of the queue manager function of multiple instances of WebSphere MQ or any other HA solution. For load sharing, you can see the WebSphere MQ clustering feature.

+2
source

Source: https://habr.com/ru/post/1502641/


All Articles