Symptom
Messages put to an alias
queue go to SYSTEM.DEAD.LETTER.QUEUE with reason MQRC_UNKNOWN_ALIAS_BASE_Q.
Cause
A message is routed to a
queue manager where a clustered alias queue is defined. A local target queue is
not defined on that queue manager. Because the message was put with the
MQOO_BIND_ON_OPEN open option, the queue manager cannot requeue the message.
When MQOO_BIND_ON_OPEN
is used, the cluster queue alias is firmly bound. The resolved name is the name
of the target queue and any queue manager on which the cluster queue alias is
defined. The queue manager name is placed in the transmission queue header. If
the target queue does not exist on the queue manager to which the message is
sent, the message is put on the dead letter queue. The destination is not
recomputed, because the transmission header contains the name of the target
queue manager resolved by MQOO_BIND_ON_OPEN. If the alias queue had been opened
withMQOO_BIND_NOT_FIXED, then the transmission queue header would contain a
blank queue manager name, and the destination would be recomputed. In which
case, if the local queue is defined elsewhere in the cluster, the message would
be sent there.
Solution
a) Change all alias
queue definitions to specify DEFBIND(NOTFIXED).
b) Use
MQOO_BIND_NOT_FIXED as an open option when the queue is opened.
c) If you specify
MQOO_BIND_ON_OPEN, ensure that a cluster alias that resolves to a local queue
defined on the same queue manager as the alias.
Comments