Bird
Raised Fist0
RabbitMQdevops~20 mins

Dead letter exchanges and queues in RabbitMQ - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Dead Letter Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
1:30remaining
Purpose of Dead Letter Exchanges

What is the main purpose of a dead letter exchange (DLX) in RabbitMQ?

ATo speed up message delivery by bypassing normal queues
BTo automatically delete messages after they are consumed
CTo encrypt messages before they reach the consumer
DTo route messages that cannot be delivered or are rejected to a special queue for later inspection
Attempts:
2 left
💡 Hint

Think about what happens to messages that fail processing or expire.

💻 Command Output
intermediate
2:00remaining
Output of Declaring a Queue with DLX

What is the output or effect of running this RabbitMQ CLI command?

rabbitmqadmin declare queue name=myqueue durable=true arguments='{"x-dead-letter-exchange":"dlx-exchange"}'
ACreates a queue named 'myqueue' but ignores the dead letter exchange argument
BCreates a durable queue named 'myqueue' that sends rejected or expired messages to 'dlx-exchange'
CFails with a syntax error due to incorrect JSON format in arguments
DCreates a non-durable queue named 'myqueue' without dead letter functionality
Attempts:
2 left
💡 Hint

Check how the 'arguments' parameter is used to set dead letter exchange.

🔀 Workflow
advanced
2:30remaining
Configuring Dead Letter Queue Workflow

Which sequence of steps correctly sets up a dead letter exchange and queue in RabbitMQ?

A1,2,3,4
B3,1,2,4
C2,1,3,4
D1,3,2,4
Attempts:
2 left
💡 Hint

Think about the order: exchanges and queues must exist before binding and usage.

❓ Troubleshoot
advanced
2:00remaining
Troubleshooting Missing Dead Letter Messages

You configured a queue with a dead letter exchange, but messages rejected from the queue do not appear in the dead letter queue. What is a likely cause?

AThe dead letter queue is not bound to the dead letter exchange with the correct routing key
BThe main queue is not durable
CThe dead letter exchange type is set to 'fanout'
DThe messages are not published as persistent
Attempts:
2 left
💡 Hint

Check bindings between exchange and queue carefully.

✅ Best Practice
expert
3:00remaining
Best Practice for Handling Poison Messages

What is the best practice for handling poison messages (messages that always fail processing) in a RabbitMQ dead letter queue setup?

ARe-publish poison messages endlessly to the main queue to retry processing
BAutomatically delete poison messages from the dead letter queue to save space
CSet a maximum retry count and move poison messages to a separate queue for manual inspection
DIgnore poison messages and let them accumulate in the dead letter queue
Attempts:
2 left
💡 Hint

Think about how to avoid infinite retry loops and keep the system healthy.

Practice

(1/5)
1. What is the main purpose of a dead letter exchange (DLX) in RabbitMQ?
easy
A. To delete all messages after processing
B. To speed up message delivery
C. To encrypt messages in the queue
D. To catch messages that cannot be delivered or processed

Solution

  1. Step 1: Understand the role of dead letter exchanges

    Dead letter exchanges are used to handle messages that cannot be delivered or processed by the original queue.
  2. Step 2: Identify the correct purpose

    The main purpose is to catch and route these undeliverable messages to a special queue for later inspection or handling.
  3. Final Answer:

    To catch messages that cannot be delivered or processed -> Option D
  4. Quick Check:

    Dead letter exchange = catch undelivered messages [OK]
Hint: DLX catches failed messages for later handling [OK]
Common Mistakes:
  • Thinking DLX speeds up delivery
  • Confusing DLX with encryption
  • Assuming DLX deletes messages automatically
2. Which queue argument correctly sets a dead letter exchange for a RabbitMQ queue?
easy
A. x-dead-letter-queue
B. x-dead-letter-exchange
C. dead-letter-exchange
D. dead-letter-queue

Solution

  1. Step 1: Recall the correct argument name

    The correct argument to set a dead letter exchange on a queue is x-dead-letter-exchange.
  2. Step 2: Verify other options

    Options like x-dead-letter-queue or missing the x- prefix are incorrect syntax.
  3. Final Answer:

    x-dead-letter-exchange -> Option B
  4. Quick Check:

    Dead letter exchange argument = x-dead-letter-exchange [OK]
Hint: Dead letter exchange argument always starts with x-dead-letter- [OK]
Common Mistakes:
  • Using 'dead-letter-exchange' without x- prefix
  • Confusing dead letter queue with exchange argument
  • Misspelling the argument name
3. Given this queue declaration in RabbitMQ:
channel.queue_declare(queue='task_queue', arguments={
  'x-dead-letter-exchange': 'dlx',
  'x-message-ttl': 10000
})
channel.exchange_declare(exchange='dlx', exchange_type='fanout')
channel.queue_declare(queue='dead_letter_queue')
channel.queue_bind(queue='dead_letter_queue', exchange='dlx')
What happens to a message in 'task_queue' after 10 seconds if it is not consumed?
medium
A. It is moved to 'dead_letter_queue' via the 'dlx' exchange
B. It is sent back to the producer
C. It remains in 'task_queue' indefinitely
D. It is deleted immediately after 10 seconds

Solution

  1. Step 1: Understand message TTL and dead letter exchange

    The message TTL (time-to-live) is set to 10000 ms (10 seconds). After this time, if the message is not consumed, it expires.
  2. Step 2: Check dead letter exchange binding

    The queue has x-dead-letter-exchange set to 'dlx', which is bound to 'dead_letter_queue'. Expired messages are routed there.
  3. Final Answer:

    It is moved to 'dead_letter_queue' via the 'dlx' exchange -> Option A
  4. Quick Check:

    Expired message + DLX = move to dead letter queue [OK]
Hint: Expired messages go to DLX-bound queue [OK]
Common Mistakes:
  • Assuming messages are deleted instead of moved
  • Thinking messages stay in original queue after TTL
  • Confusing message return to producer
4. You set up a queue with x-dead-letter-exchange but messages are not appearing in the dead letter queue. What is a likely cause?
medium
A. The message TTL is set too high
B. The original queue has no consumers
C. The dead letter exchange is not bound to any queue
D. The queue name is missing in the declaration

Solution

  1. Step 1: Check dead letter exchange bindings

    For messages to appear in the dead letter queue, the dead letter exchange must be bound to a queue to receive messages.
  2. Step 2: Analyze other options

    No consumers or high TTL do not prevent dead lettering. Missing queue name would cause errors, not silent failure.
  3. Final Answer:

    The dead letter exchange is not bound to any queue -> Option C
  4. Quick Check:

    DLX must be bound to queue to receive dead letters [OK]
Hint: DLX must be bound to queue to catch messages [OK]
Common Mistakes:
  • Ignoring missing binding of DLX to queue
  • Blaming consumers for dead letter routing
  • Confusing TTL with dead letter routing
5. You want to route expired messages from a queue to a dead letter queue but with a different routing key than the original. Which configuration achieves this?
hard
A. Set x-dead-letter-routing-key on the original queue with the new routing key
B. Set x-message-ttl on the dead letter queue
C. Bind the dead letter exchange with the original routing key only
D. Set x-dead-letter-exchange on the dead letter queue

Solution

  1. Step 1: Understand routing key override for dead letters

    To change the routing key for dead letters, set x-dead-letter-routing-key on the original queue.
  2. Step 2: Verify other options

    Setting TTL on dead letter queue or binding with original routing key does not change routing key on dead letter messages. Setting DLX on dead letter queue is incorrect.
  3. Final Answer:

    Set x-dead-letter-routing-key on the original queue with the new routing key -> Option A
  4. Quick Check:

    Use x-dead-letter-routing-key to change dead letter routing [OK]
Hint: Use x-dead-letter-routing-key to change dead letter routing key [OK]
Common Mistakes:
  • Trying to set routing key on dead letter queue
  • Confusing TTL with routing key
  • Not setting routing key on original queue
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard