Bird
Raised Fist0
AWScloud~20 mins

Dead letter queues in AWS - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Dead Letter Queue Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
Purpose of Dead Letter Queues in AWS

What is the primary purpose of a Dead Letter Queue (DLQ) in AWS messaging services like SQS or SNS?

ATo store messages that failed processing after multiple retries for later analysis or reprocessing.
BTo permanently delete messages that cause errors during processing.
CTo automatically retry messages indefinitely until they succeed.
DTo encrypt messages before sending them to the main queue.
Attempts:
2 left
💡 Hint

Think about what happens to messages that cannot be processed successfully.

❓ Configuration
intermediate
2:00remaining
Configuring a Dead Letter Queue for an SQS Queue

You want to configure an SQS queue to send failed messages to a Dead Letter Queue after 5 failed processing attempts. Which configuration setting must you set on the main queue?

AEnable server-side encryption on the main queue.
BSet the VisibilityTimeout attribute to 5 seconds on the main queue.
CSet the DelaySeconds attribute to 5 on the DLQ.
DSet the RedrivePolicy attribute with maxReceiveCount set to 5 and specify the ARN of the DLQ.
Attempts:
2 left
💡 Hint

Look for the setting that controls how many times a message can be received before moving to DLQ.

❓ Architecture
advanced
3:00remaining
Designing a Reliable Message Processing System with DLQ

You are designing a system that processes messages from an SQS queue. To ensure no message is lost and failures are handled gracefully, which architecture pattern involving DLQs is best?

AUse a main SQS queue with a DLQ configured; process messages and on failure, messages move to DLQ for manual or automated reprocessing.
BUse only a DLQ without a main queue to store all messages directly.
CProcess messages directly from the DLQ and discard messages from the main queue.
DUse multiple main queues without DLQs and rely on message visibility timeout for retries.
Attempts:
2 left
💡 Hint

Consider how to separate failed messages from successfully processed ones.

❓ service_behavior
advanced
2:00remaining
Behavior of Messages in DLQ After Reaching maxReceiveCount

What happens to a message in an SQS main queue when it reaches the maxReceiveCount specified in the RedrivePolicy?

AThe message is deleted permanently from the main queue without moving to any other queue.
BThe message is moved automatically to the configured Dead Letter Queue and removed from the main queue.
CThe message is retried indefinitely in the main queue without moving to DLQ.
DThe message is archived in the main queue but remains visible for processing.
Attempts:
2 left
💡 Hint

Think about what the RedrivePolicy controls regarding message retries and failures.

❓ security
expert
3:00remaining
Securing Access to Dead Letter Queues in AWS

You want to ensure that only specific AWS Lambda functions can read messages from your SQS Dead Letter Queue. Which is the best way to enforce this access control?

AUse a public access policy on the DLQ to allow all AWS services to read messages.
BSet the DLQ's RedrivePolicy to restrict access to Lambda functions.
CAttach an IAM policy to the Lambda functions allowing sqs:ReceiveMessage and sqs:DeleteMessage on the DLQ ARN, and set a resource-based policy on the DLQ to allow only those Lambda roles.
DEnable server-side encryption on the DLQ and rely on encryption keys to restrict access.
Attempts:
2 left
💡 Hint

Consider both IAM roles and resource policies for fine-grained access control.

Practice

(1/5)
1. What is the main purpose of a Dead Letter Queue (DLQ) in AWS SQS?
easy
A. To speed up message delivery by duplicating messages
B. To store messages that failed processing to keep the main queue clean
C. To permanently delete messages after processing
D. To encrypt messages for security

Solution

  1. Step 1: Understand the role of DLQ

    A Dead Letter Queue is designed to hold messages that cannot be processed successfully after multiple attempts.
  2. Step 2: Compare options with DLQ purpose

    Only To store messages that failed processing to keep the main queue clean correctly describes storing failed messages to keep the main queue clean.
  3. Final Answer:

    To store messages that failed processing to keep the main queue clean -> Option B
  4. Quick Check:

    DLQ stores failed messages [OK]
Hint: DLQ holds failed messages, not speeding or deleting [OK]
Common Mistakes:
  • Thinking DLQ speeds up delivery
  • Confusing DLQ with message deletion
  • Assuming DLQ encrypts messages
2. Which of the following is the correct way to configure a Dead Letter Queue in AWS SQS using RedrivePolicy?
easy
A. {"deadLetterTargetArn":"arn:aws:sqs:region:account-id:DLQ","maxReceiveCount":5}
B. {"maxReceiveCount":5,"deadLetterQueueArn":"arn:aws:sqs:region:account-id:DLQ"}
C. {"deadLetterQueue":"arn:aws:sqs:region:account-id:DLQ","maxRetries":5}
D. {"targetArn":"arn:aws:sqs:region:account-id:DLQ","maxReceiveCount":10}

Solution

  1. Step 1: Identify correct RedrivePolicy keys

    The correct keys are "deadLetterTargetArn" and "maxReceiveCount" as per AWS documentation.
  2. Step 2: Match options with correct keys

    Only {"deadLetterTargetArn":"arn:aws:sqs:region:account-id:DLQ","maxReceiveCount":5} uses "deadLetterTargetArn" and "maxReceiveCount" correctly.
  3. Final Answer:

    {"deadLetterTargetArn":"arn:aws:sqs:region:account-id:DLQ","maxReceiveCount":5} -> Option A
  4. Quick Check:

    Correct keys = deadLetterTargetArn + maxReceiveCount [OK]
Hint: Look for deadLetterTargetArn and maxReceiveCount keys [OK]
Common Mistakes:
  • Using wrong key names like deadLetterQueueArn
  • Confusing maxRetries with maxReceiveCount
  • Swapping key order incorrectly
3. Given the following SQS queue configuration with a DLQ and maxReceiveCount set to 3, what happens when a message fails processing 4 times?
{"RedrivePolicy": {"deadLetterTargetArn": "arn:aws:sqs:region:account-id:DLQ", "maxReceiveCount": 3}}
medium
A. The message is moved to the Dead Letter Queue after the 4th failure
B. The message is deleted immediately after the 3rd failure
C. The message stays in the main queue indefinitely
D. The message is moved to the DLQ after the 3rd failure

Solution

  1. Step 1: Understand maxReceiveCount meaning

    maxReceiveCount defines how many times a message can be received before moving to DLQ.
  2. Step 2: Apply maxReceiveCount to message failures

    After 3 failed receives, the message is moved to the DLQ, not after the 4th.
  3. Final Answer:

    The message is moved to the DLQ after the 3rd failure -> Option D
  4. Quick Check:

    maxReceiveCount = 3 means move to DLQ after 3 failures [OK]
Hint: Message moves to DLQ exactly at maxReceiveCount failures [OK]
Common Mistakes:
  • Thinking message moves after 4th failure
  • Assuming message is deleted after failures
  • Believing message stays in main queue forever
4. You configured a DLQ with maxReceiveCount set to 5, but messages are not moving to the DLQ after 5 failed processing attempts. What is the most likely cause?
medium
A. maxReceiveCount must be set to 1 for DLQ to work
B. The DLQ ARN is invalid but messages still move to DLQ
C. The RedrivePolicy is missing or incorrectly attached to the main queue
D. Messages are deleted automatically after 3 failures regardless of DLQ

Solution

  1. Step 1: Check RedrivePolicy attachment

    If RedrivePolicy is missing or not attached properly, messages won't move to DLQ.
  2. Step 2: Validate other options

    Invalid ARN would cause errors, maxReceiveCount can be any positive number, and messages are not deleted automatically without DLQ.
  3. Final Answer:

    The RedrivePolicy is missing or incorrectly attached to the main queue -> Option C
  4. Quick Check:

    DLQ requires correct RedrivePolicy attachment [OK]
Hint: Verify RedrivePolicy is attached to main queue [OK]
Common Mistakes:
  • Ignoring RedrivePolicy attachment
  • Assuming invalid ARN still works
  • Believing maxReceiveCount must be 1
5. You have an SQS queue with a DLQ configured and maxReceiveCount set to 4. You want to ensure that messages that fail processing due to a temporary downstream service outage are retried multiple times before moving to the DLQ. Which approach best achieves this?
hard
A. Set maxReceiveCount to 4 and implement exponential backoff in the message consumer
B. Set maxReceiveCount to 1 and rely on DLQ for retries
C. Remove the DLQ and increase message visibility timeout
D. Set maxReceiveCount to 10 and disable retries in the consumer

Solution

  1. Step 1: Understand retry and DLQ roles

    maxReceiveCount controls how many times a message is retried before DLQ. Exponential backoff helps avoid flooding retries.
  2. Step 2: Evaluate options for retry strategy

    Set maxReceiveCount to 4 and implement exponential backoff in the message consumer combines proper maxReceiveCount with backoff to handle temporary failures effectively.
  3. Step 3: Reject other options

    Removing the DLQ is counterproductive as it's needed for persistent failures. Setting maxReceiveCount to 1 limits retries too much. Setting maxReceiveCount to 10 and disabling retries in the consumer is not effective for temporary outages.
  4. Final Answer:

    Set maxReceiveCount to 4 and implement exponential backoff in the message consumer -> Option A
  5. Quick Check:

    Retries + backoff before DLQ = best practice [OK]
Hint: Use maxReceiveCount with backoff for retries before DLQ [OK]
Common Mistakes:
  • Setting maxReceiveCount too low
  • Removing DLQ mistakenly
  • Disabling retries in consumer
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