Skip to content
This repository was archived by the owner on Mar 23, 2026. It is now read-only.
This repository was archived by the owner on Mar 23, 2026. It is now read-only.

bug: Using DLQ for DLQ, polling/receiving from the first DLQ causes the message to go into the second DLQ immediately #5225

@eyalrin

Description

@eyalrin

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

Defined 3 SQS queues:

  1. Queue1 (Set it's DLQ to Queue2 using REDRIVE_POLICY with maxReceiveCount=1 and VISIBILITY_TIMEOUT=3)
  2. Queue2 (Set it's DLQ to Queue3 using REDRIVE_POLICYwith maxReceiveCount=1 and VISIBILITY_TIMEOUT=3)
  3. Queue3

Therefore the messages flow is Queue1 -> Queue2 -> Queue3 (in case of no messages deletion and more then 1 receive operation on the queue).

Flow:

  1. Send message to Queue1 (aws sqs send-message)
  2. Poll message from Queue1 (aws sqs receive-message) and got message
  3. Wait for VISIBILITY_TIMEOUT to expire
  4. Poll message from Queue1 (aws sqs receive-message) and got no message -> message goes to Queue2
  5. Poll message from Queue2 (aws sqs receive-message) - got no message -> message goes to Queue3

Expected Behavior

Flow (Same queues configuration):

  1. Send message to Queue1 (aws sqs send-message)
  2. Poll message from Queue1 (aws sqs receive-message) and got message
  3. Wait for VISIBILITY_TIMEOUT to expire
  4. Poll message from Queue1 (aws sqs receive-message) and got no message -> message goes to Queue2
  5. Poll message from Queue2 (aws sqs receive-message) and got message
  6. Poll message from Queue2 (aws sqs receive-message) - got no message -> message goes to Queue3

Look at 5 - This step does not happen actually in Localstack (tested same configuration on AWS and it works as expected)

How are you starting LocalStack?

With a docker-compose file

Steps To Reproduce

How are you starting localstack (e.g., bin/localstack command, arguments, or docker-compose.yml)

docker compose up -d

Client commands (e.g., AWS SDK code snippet, or sequence of "awslocal" commands)

awslocal sqs create-queue --queue-name queue3 --attributes file:///docker-entrypoint-initaws.d/sqs-config/queue3-attributes.json

awslocal sqs create-queue --queue-name queue2 --attributes file:///docker-entrypoint-initaws.d/sqs-config/queue2-attributes.json
 
awslocal sqs create-queue --queue-name queue1 --attributes file:///docker-entrypoint-initaws.d/sqs-config/queue1-attributes.json

(Remove the .txt from each file - added it just to be able to upload)
queue1-attributes.json.txt
queue2-attributes.json.txt
queue3-attributes.json.txt

Environment

- OS: MacOS
- LocalStack: localstack-full:0.13.0.10

Anything else?

No response

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions