IBM MQ 7.5 was EOS 30th April 2018.Click EOS notice for more details
Configuring request/reply to a cluster
Configure a request/reply message path from a queue manager
outside a cluster. Hide the inner details of the cluster by using
a gateway queue manager as the communication path to and from the
cluster.
Before you begin
Figure 1 shows a queue
manager called QM3 that is outside the cluster called
DEMO. QM3 could be a queue manager on a WebSphere® MQ product that
does not support clusters. QM3 hosts a queue called
Q3, which is defined as follows:
DEFINE QLOCAL(Q3)
Inside the cluster are two queue managers called QM1
and QM2. QM2 hosts a cluster queue
called Q2, which is defined as follows:
DEFINE QLOCAL(Q2) CLUSTER(DEMO)
About this task
Follow the advice in the procedure to set up the path for
the request and reply messages.
Procedure
Send the request message to the cluster.
Consider how the queue manager that is outside the cluster puts a
message to the queue Q2 at QM2,
that is inside the cluster. A queue manager outside the cluster must
have a QREMOTE definition for each queue in the cluster
that it puts messages to.
Because QM3 is not part of
a cluster, it must communicate using distributed queuing techniques.
Therefore, it must also have a sender-channel and a transmission queue
to QM1. QM1 needs a corresponding
receiver channel. The channels and transmission queues are not shown
explicitly in Figure 1.
In the
example, an application at QM3 issues an
MQPUT call to put a message to Q2. The
QREMOTE definition causes the message to be routed to
Q2 at QM2 using the sender-channel that
is getting messages from the QM1 transmission queue.
Receive the reply message from the cluster.
Use a queue manager alias to create a return path
for replies to a queue manager outside the cluster. The gateway,
QM1, advertises a queue-manager alias for the queue manager
that is outside the cluster, QM3. It advertises
QM3 to the queue managers inside the cluster by adding the
cluster attribute to a queue manager alias definition for
QM3. A queue manager alias definition is like a remote queue
definition, but with a blank RNAME.
We must consider the choice of name
for the transmission queue used to forward replies back from
QM1 to QM3. Implicit in the QREMOTE
definition, by the omission of the XMITQ attribute,
is the name of the transmission queue is QM3. But
QM3 is the same name as we expect to advertise to the rest
of the cluster using the queue manager alias.
WebSphere MQ does not allow you to give
both the transmission queue and the queue manager alias the same name.
One solution is to create a transmission queue to forward messages
to QM3 with a different name to the queue manager
alias.
Provide the transmission queue name in the QREMOTE
definition.
The new queue manager alias couples
the new transmission queue called QM3.XMIT with the
QM3 queue manager alias. It is a simple and correct solution,
but not wholly satisfactory. It has broken the naming convention for
transmission queues that they are given the same name as the target
queue manager. Are there any alternative solutions that preserve the
transmission queue naming convention?
The problem
arises because the requester defaulted to passing QM3
as the reply-to queue manager name in the request message that is
sent from QM3. The server on QM2
uses the QM3 reply-to queue manager name to address
QM3 in its replies. The solution required QM1
to advertise QM3 as the queue manager alias to
return reply messages to and prevented QM1 from using
QM3 as the name of the transmission queue.
Instead
of defaulting to providing QM3 as the reply-to queue
manager name, applications on QM3 need to pass a
reply-to queue manager alias to QM1 for reply messages.
The gateway queue manager QM1 advertises the queue
manager alias for replies to QM3 rather than
QM3 itself, avoiding the conflict with the name of the transmission
queue.
Two changes to the
configuration commands are required.
The QREMOTE at QM1 now advertises
our queue manager alias QM3.ALIAS to the rest of
the cluster, coupling it to the name of the real queue manager
QM3. QM3 is again the name of the transmission
queue to send reply queues back to QM3
The client application must provide QM3.ALIAS
as the name of the reply-to queue manager when it constructs the
request message. You can provide QM3.ALIAS to the
client application in one of two ways.
Code QM3.ALIAS in the reply-to queue manager
name field constructed by MQPUT in the
MQMD. You must do it this way if you are using a dynamic
queue for replies.
Use a reply-to queue alias, Q3.ALIAS, rather
than a reply-to queue when providing the reply-to queue name.
Note: You cannot demonstrate the use of reply-to queue aliases
with AMQSREQ0. It opens the reply-to queue using
the queue name provided in parameter 3, or the default SYSTEM.SAMPLE.REPLY
model queue. You need to modify the sample providing another parameter
containing the reply-to queue alias to name the reply-to queue manager
alias for MQPUT.