IBM MQ reason code

MQRC 2087: Remote queue manager unknown

MQRC 2087 (MQRC_UNKNOWN_REMOTE_Q_MGR, hex 0827) means an MQOPEN or MQPUT1 named a remote queue manager, directly or through a remote queue definition, and the local queue manager has no way to route messages to it. There is no matching transmission queue, queue manager alias, cluster route or default transmission queue.

Other names for this code

Also written as RC2087, reason code 2087, MQ 2087, MQ error 2087, MQRC_UNKNOWN_REMOTE_Q_MGR, 0827, 0x0827, unknown remote queue manager, DEFXMITQ, MQJE001 Reason 2087.

What it means

To send a message to another queue manager, the local queue manager must pick a transmission queue. It can find one in several ways. The remote queue definition can name one in XMITQ. A transmission queue can have the same name as the remote queue manager. A queue manager alias can redirect the name. The cluster can provide a route. Or the queue manager can fall back on its default transmission queue (DEFXMITQ). If none of these gives an answer, the open fails with MQCC_FAILED and reason 2087.

IBM lists several variations. A remote queue definition (QREMOTE) has a blank or local RQMNAME. Or it names a remote queue manager with no matching transmission queue while DEFXMITQ is blank. Or the remote queue and queue manager identify a cluster queue that can't be resolved. A QREMOTE used as a queue manager alias has RNAME filled in when it should be blank. IBM also lists an ObjectQMgrName that names a model queue, which is never valid there.

On z/OS there is an extra case. If the target queue manager is in the same queue sharing group but intra-group queuing (IGQ) is turned off, the queue manager can't use the group's shared transmission queue, and the open fails with 2087. The same reason code identifies the Unknown Remote Queue Manager event.

Common causes

  • A remote queue definition names a remote queue manager, but there is no transmission queue of that name, no XMITQ on the definition and no DEFXMITQ.
  • The application sets ObjectQMgrName, or a JMS queue URI such as queue://QM2/ORDERS.IN, to a queue manager this queue manager has no route to.
  • The target is a cluster queue manager that this queue manager hasn't learned about, and there is no default transmission queue.
  • A QREMOTE meant as a queue manager alias has RNAME set, so it isn't treated as an alias.
  • On z/OS, the target is in the same queue sharing group and IGQ is disabled.

How to find the problem

  1. Display the remote queue definition with DISPLAY QREMOTE(PAY.TO.HQ) RNAME RQMNAME XMITQ.
  2. Check for a transmission queue of the right name with DISPLAY QLOCAL(QM2) USAGE, which should show USAGE(XMITQ).
  3. Check the default with DISPLAY QMGR DEFXMITQ. On z/OS also check DISPLAY QMGR IGQ.
  4. In a cluster, run DISPLAY CLUSQMGR(QM2) to see whether this queue manager knows the target.
  5. Log the ObjectName and ObjectQMgrName the application passes.

How to fix it

  • Create a transmission queue named after the remote queue manager, with a sender channel to it, or set XMITQ on the remote queue definition.
  • Correct RQMNAME, or leave RNAME blank on a definition meant as a queue manager alias.
  • Set DEFXMITQ if you want unknown destinations to go to a default route, such as a hub.
  • Fix cluster membership so the queue manager learns about the target.
  • On z/OS, enable IGQ if messages to queue sharing group members should use it.

IBM documentation

IBM documentation: MQRC 2087. Use the documentation for your installed release.

Report a correction to WND Software.

Questions

What is the difference between 2086 and 2087?

2086 means the queue manager name itself isn't valid for this call. 2087 means the name is acceptable, but the local queue manager has no route to that queue manager.

Does a channel need to be running to avoid 2087?

No. The open only needs a route, meaning a transmission queue. If the channel is down, messages wait on the transmission queue instead.

Can DEFXMITQ hide routing mistakes?

Yes. With a default transmission queue set, messages for unknown queue managers go there instead of failing with 2087, so a typo shows up later as an undeliverable message.