In RabbitMQ, the dead letter exchanges in the message queue serves as the dead letter queue and processes messages negatively acknowledged by consumers as well as messages for which all the retries tend to fail. A dead letter message in RabbitMQ goes through the following route:
- A producer sends messages to the exchange
- The exchange directs the messages to a queue
- The messages in the queue are then fetched by the consumer
- The consumer is unable to consume the message. It is then retried 16 times, but the consumer still fails to consume it or the consumer acknowledges the message negatively. If either of the two things happen, the message then becomes a dead-letter message.
- The dead letter message in the queue is then sent to the dead letter exchange and a dead letter routing key is set for the message.
- The dead letter exchange directs the message to the dead letter queue.
In Memphis, DLS gets created automatically right on the first poison message. A message is considered poison when it passes the “maxAckDeliveries” value set by the user.
The DLS can also
- Act as a temp store place for messages that didn’t pass schema validation
- Retransmit the message directly to the unconsumed consumer without code change, at runtime
- Messages can be consumed the message directly through the SDK from any consumer
- Drop the message from the dead-letter station using GUI or SDK
https://docs.memphis.dev/memphis/memphis/concepts/dead-letter