Search code examples
ibm-mq

Migration of MQ messages to a new consumer on a different server


We are migrating some queues to allow a new consumer to read the messages We have the following setup in a cluster 2 Full repos QMF1 and QMF2 with a Queue Alias (QAF) 2 Partial repos QMB1 and QMB2 with a Cluster Queue Local (QLB)

Message from APP1 put messages to the QAF queues with a target of QLB, application APP2 consumes the messages from QLB.

Routes then are

APP1 -> QAF (QMF1) -> QLB (QMB1) -> APP2
APP1 -> QAF (QMF1) -> QLB (QMB2) -> APP2
APP1 -> QAF (QMF2) -> QLB (QMB1) -> APP2
APP1 -> QAF (QMF2) -> QLB (QMB2) -> APP2

In order to achieve the migration without changing the Applications configuration we have introduced a new Partial QMGR QMN1 and additional Cluster Queue Alias QAN with a non-Clustered QLB, this allows the QAF TARGET to be changed from QLB to QAN

Routes ideally is

APP1 -> QAF (QMF1)  -> QAN (QMN1) -> QLB (QMN1) -> APP3

Initial low volume test can see this is working OK, however when looking at the queues available to QMN1 we have the following QMGR QMN1 has

QLB on QMN1, Local queue
QLB on QMB1, cluster queue 
QLB on QMB2, cluster queue

Is this now going to be an issue when volume of traffic is introduced, will it be possible for the below scenarios to also work

APP1 -> QAN (QMN1) -> QLB (QMB1) -> APP2
APP1 -> QAN (QMN1) -> QLB (QMB2) -> APP2

Solution

  • When opening a queue, a matching local, non-clustered queue is selected ahead of any clustered queues.

    In the configuration described, this means that messages sent to QMN1 with a target queue name of QLB will be put to the local queue instance and the clustered queues will not be considered.

    Reference: https://www.ibm.com/docs/en/ibm-mq/9.3?topic=call-name-resolution