Dead-letter queue considerations
In some IBM MQ implementations the dead-letter queue is referred to as an undelivered-message queue.
If a channel ceases to run for any reason, applications will probably continue to place messages on transmission queues, creating a potential overflow situation. Applications can monitor transmission queues to find the number of messages waiting to be sent, but this would not be a normal function for them to carry out.
When this occurs in a message-originating node, and the local transmission queue is full, the application's PUT fails.
When this occurs in a staging or destination node, there are three ways that the MCA copes with the situation:
- By calling the message-retry exit, if one is defined.
- By directing all overflow messages to a dead-letter queue (DLQ), returning an exception report to applications that requested these reports. Note: In distributed-queuing management, if the message is too big for the DLQ, the DLQ is full, or the DLQ is not available, the channel stops and the message remains on the transmission queue. Ensure your DLQ is defined, available, and sized for the largest messages you handle.
- By closing down the channel, if neither of the previous options succeeded.
- By returning the undelivered messages back to the sending end and returning a full report to the reply-to queue (MQRC_EXCEPTION_WITH_FULL_DATA and MQRO_DISCARD_MSG).
If an MCA is unable to put a message on the DLQ:
- The channel stops
- Appropriate error messages are issued at the system consoles at both ends of the message channel
- The unit of work is backed out, and the messages reappear on the transmission queue at the sending channel end of the channel
- Triggering is disabled for the transmission queue
Parent topic: Problem determination in DQM