Distributed queuing with intra-group queuing (multiple delivery paths)

For applications that process short messages it might be feasible to configure only intra-group queuing for delivering messages between queue managers in a queue-sharing group. However, for applications that process large (greater than the maximum supported message length for shared queues minus the length of the MQXQH) messages, it may be necessary to configure distributed queuing with intra-group queuing. The following diagram illustrates this configuration.

Figure 50. An example configuration
An example configuration. The requesting application puts messages to the remote queue, RQ1. Messages are then either put to the the transmission queue, QX1, on QMG1, or to transmission queue SYSTEM.QSG.TRANSMIT.QUEUE, to be received by QMGR2. Refer to the text following the diagram for a more detailed description.

Open/Put processing

  1. It is important to note that when the requesting application opens remote queue RQ1, name resolution occurs for both the non-shared transmission queue XQ1 and the shared transmission queue SYSTEM.QSG.TRANSMIT.QUEUE.
  2. When the requesting application puts a message on to the remote queue, the queue manager decides, based on whether intra-group queuing is enabled for outbound transfer and on the message characteristics, whether to put the message to transmission queue XQ1, or to transmission queue SYSTEM.QSG.TRANSMIT.QUEUE. The queue manager places all large messages on to transmission queue XQ1, and all small messages on to transmission queue SYSTEM.QSG.TRANSMIT.QUEUE.
  3. If transmission queue XQ1 is full, or is not available, put requests for large messages fail synchronously with a suitable return and reason code. However, put requests for small messages continue to succeed and are placed on transmission queue SYSTEM.QSG.TRANSMIT.QUEUE.
  4. If transmission queue SYSTEM.QSG.TRANSMIT.QUEUE is full, or cannot be put to, put requests for small messages fail synchronously with a suitable return and reason code. However, put requests for large messages continue to succeed and are placed on transmission queue XQ1. In this case, no attempt is made to put the small messages on to a transmission queue.

Flow for large messages

  1. The requesting application puts large messages to remote queue RQ1.
  2. Queue manager QMG1 puts the messages on to transmission queue XQ1.
  3. Sender MCA (S) on queue manager QMG1 retrieves the messages from transmission queue XQ1 and sends them to queue manager QMG2.
  4. Receiver MCA (R) on queue manager QMG2 receives the messages and places them on to destination queue LQ1.
  5. The serving application retrieves and subsequently processes the messages from queue LQ1.

Flow for small messages

  1. The requesting application puts small messages on to remote queue RQ1.
  2. Queue manager QMG1 puts the messages on to transmission queue SYSTEM.QSG.TRANSMIT.QUEUE.
  3. IGQ on queue manager QMG2 retrieves the messages and places them on to the destination queue LQ1.
  4. The serving application retrieves the messages from queue LQ1.

Points to note about such a configuration

  1. The requesting application does not need to be aware of the underlying mechanism used for the delivery of messages.
  2. A potentially faster message delivery mechanism can be achieved for small messages.
  3. Multiple paths are available for message delivery (that is, the normal channel route and the intra-group queuing route).
  4. The intra-group queuing route, being potentially faster, is selected in preference to the normal channel route. Depending on the message characteristics, message delivery may be divided across the two paths. Hence, messages may be delivered out of sequence (though this is also possible if messages are delivered using only the normal channel route).
  5. Once a route has been selected, and messages have been placed on to the respective transmission queues, only the selected route will be used for message delivery. Any unprocessed messages on the SYSTEM.QSG.TRANSMIT.QUEUE are not diverted to transmission queue XQ1.