Dead-Letter Queues

Applies To: Windows Server 2008

Dead-letter queues

Undeliverable and expired nontransactional messages are stored in nontransactional dead-letter queues. Undeliverable and expired transactional messages are stored in transactional dead-letter queues. Such messages are stored in the applicable queues on the computer on which the message expired (or failed to be delivered or forwarded). This can be the source computer, the target computer, or an intermediate Message Queuing server.

There is one nontransactional dead-letter queue and one transactional dead-letter queue on each Message Queuing server and independent client. These queues are created automatically and are listed in the System Queues folder of the applicable computer in MMC snap-ins.

This version of Message Queuing enforces a 250 MB quota on the size of the nontransactional dead-letter queue. For more information about this quota see Security Enhancements that Affect the Default Behavior of Message Queuing.

Conditions that can cause a message to be undeliverable include the following:

  • The destination queue is unknown by the sender.

  • The message exceeds its maximum number of allowed hops.

  • The queue storage limit, or quota, is reached.

  • A nontransactional message is sent to a transactional queue or vice versa.

  • For transactional messages, the sending or receiving transaction failed. However, when the receiving transaction fails, these messages are not placed in the transactional dead-letter queue.

Messages are considered expired when:

  • The lifetime of messages on the network, called the time-to-reach-queue (TTRQ), elapses. This can be set programmatically by a Message Queuing application.

  • Their time-to-be-received (TTBR) elapses. This is always set programmatically by a Message Queuing application.

When a sending application is not allowed to send messages to a particular queue because of a lack of the necessary access rights, those messages are not stored in the nontransactional dead-letter or transactional dead-letter queues. However, negative acknowledgment messages may be generated if the original messages are so configured.

Messages in nontransactional dead-letter and transactional dead-letter queues are always written to disk and are therefore recoverable.

For more information about transactional messaging, see Transactional Messaging.

Per application dead letter queues

This version of Message Queuing has per-application dead-letter queues, so that each application can use its own dead-letter queue. An application can request its own dead-letter queue by using the PROPID_M_DEADLETTER_QUEUE property as part of the message. Instead of being sent to the system transactional dead-letter queue, the message is sent to the queue that is specified in the PROPID_M_DEADLETTER_QUEUE property.

The PROPID_M_DEADLETTER_QUEUE can be set to any legal path of a transactional queue. The transactional queue must be local to the queue manager that will move the negative acknowledgment (NACK) message to the queue. A legal path is defined in Queue Path Names (https://go.microsoft.com/fwlink/?LinkId=69583).