Modernization Hub

DLQ - Dead Letter Queue

Enhanced Definition

A Dead Letter Queue (DLQ) is a special queue used by a message queuing system, such as IBM MQ for z/OS, to store messages that cannot be delivered to their intended destination queue or processed successfully by an application. Its primary purpose is to ensure that no message is lost due to delivery failures, providing a mechanism for later analysis and recovery. The Dead Letter Queue (DLQ) is a special local queue in IBM MQ on z/OS used to store messages that cannot be delivered to their intended destination queue. It acts as a holding area for undeliverable messages, preventing their loss and allowing for later investigation and potential reprocessing.

Key Characteristics

    • Automatic Routing: IBM MQ on z/OS automatically redirects messages to the DLQ when they fail to be delivered or processed due to various reasons (e.g., target queue non-existent, full, or security violation).
    • Standard Name: The default and commonly used name for the DLQ is SYSTEM.DEAD.LETTER.QUEUE, defined for each queue manager.
    • Dead-Letter Header (MQDLH): Every message placed on the DLQ is prefixed with an MQDLH structure, which contains vital information about the original message, its intended destination, and the reason code for its failure.
    • Configurable Behavior: Queue managers and individual queues can be configured to specify whether messages should be sent to the DLQ upon failure, and under what conditions.
    • Monitoring Requirement: The DLQ requires active monitoring to prevent it from filling up, which could lead to message loss if the DLQ itself becomes full, and to ensure timely resolution of failed messages.
    • Processing Utilities: IBM MQ provides utilities like CSQUTIL and a dedicated DLQ handler (CSQUDLQH) on z/OS to browse, manage, and automatically process messages found on the DLQ.

Use Cases

    • Debugging Application Errors: Developers and support teams analyze messages in the DLQ to diagnose why an application failed to process them, often indicating issues like invalid data formats, missing permissions, or application logic errors.
    • Handling Undeliverable Messages: Messages sent to a non-existent queue, a queue that is full, or a queue for which the sender lacks proper authorization will be placed on the DLQ.
    • Recovering from System Outages: If a target queue manager or application is temporarily unavailable, messages intended for it may be routed to the DLQ, allowing for re-delivery once the system is restored.
    • Auditing Message Failures: The DLQ serves as a historical record of messages that encountered delivery or processing issues, which can be crucial for compliance, auditing, and understanding system behavior.
    • Automated Message Re-routing: The DLQ handler (CSQUDLQH) can be configured with rules to automatically re-route messages to alternative queues, discard them, or trigger alerts based on the reason code and original destination.

Related Concepts

The DLQ is intrinsically linked to IBM MQ for z/OS, serving as a critical component for ensuring message reliability and integrity within the enterprise messaging infrastructure. Each Queue Manager on z/OS typically manages its own DLQ, and messages can end up there due to issues with Message Channels, Application Programs (written in COBOL, PL/I, Java, etc.) failing to process messages, or problems with the target Queues themselves. JCL is frequently used to execute IBM MQ utilities like CSQUTIL or the DLQ handler to manage and process messages on the DLQ.

Best Practices:
  • Monitor the DLQ Actively: Implement automated monitoring solutions (e.g., using OMEGAMON for MQ or custom REXX/JCL scripts) to alert operations staff when messages accumulate on the DLQ or its depth exceeds predefined thresholds.
  • Configure a DLQ Handler: Utilize the IBM MQ DLQ handler (CSQUDLQH) with a robust rule table to automatically process messages, re-routing them to error queues, discarding them, or triggering notifications based on specific criteria.
  • Define a Reasonable MAXDEPTH: Set an appropriate MAXDEPTH for the SYSTEM.DEAD.LETTER.QUEUE to prevent it from consuming excessive storage, but be aware that if the DLQ itself becomes full, messages may be discarded.
  • Implement Robust Application Error Handling: Design application programs to provide meaningful reason codes and feedback when they fail to process messages, which helps in diagnosing issues when those messages appear on the DLQ.
  • Secure the DLQ: Restrict access to the DLQ to authorized personnel only, as it may contain sensitive business data from failed transactions.
  • Establish Purge/Archive Procedures: Define regular procedures (e.g., via JCL jobs running CSQUTIL) to archive or purge old messages from the DLQ to manage its size and maintain relevance, ensuring that only actionable messages remain.

Related Vendors

IBM

646 products

Broadcom

235 products

MacKinney Systems

54 products

UNICOM Systems

35 products

Trax Softworks

3 products

Related Categories

Printing and Output

158 products

Automation

222 products

MQ, Messaging and SOA

76 products

email

33 products

CICS

214 products