0
0
AwsHow-ToBeginner · 3 min read

How to Set Delay Seconds in AWS SQS Queues

To set delay seconds in AWS SQS, use the DelaySeconds attribute when creating or updating a queue or when sending a message. This value delays the visibility of messages by the specified number of seconds (0 to 900).
📐

Syntax

The DelaySeconds attribute controls how long a message is hidden from consumers after being sent to the queue. It can be set at the queue level or per message.

  • Queue-level delay: Applies to all messages in the queue.
  • Message-level delay: Applies only to the specific message.

Values range from 0 (no delay) to 900 seconds (15 minutes).

json
QueueAttributes = {
  "DelaySeconds": "60"  # Delay all messages by 60 seconds
}

SendMessageParams = {
  "DelaySeconds": 30  # Delay this message by 30 seconds
}
💻

Example

This example shows how to create an SQS queue with a 45-second delay for all messages and how to send a message with a 10-second delay using AWS SDK for Python (boto3).

python
import boto3

sqs = boto3.client('sqs')

# Create queue with 45 seconds delay
response = sqs.create_queue(
    QueueName='MyDelayedQueue',
    Attributes={
        'DelaySeconds': '45'
    }
)
queue_url = response['QueueUrl']

# Send a message with 10 seconds delay
send_response = sqs.send_message(
    QueueUrl=queue_url,
    MessageBody='Hello with delay',
    DelaySeconds=10
)

print('Queue URL:', queue_url)
print('Message ID:', send_response['MessageId'])
Output
Queue URL: https://sqs.<region>.amazonaws.com/<account-id>/MyDelayedQueue Message ID: <unique-message-id>
⚠️

Common Pitfalls

  • Setting DelaySeconds above 900 seconds causes an error because the maximum delay is 15 minutes.
  • Confusing queue-level delay with message-level delay: queue delay applies to all messages by default, but message delay overrides it for individual messages.
  • Not specifying DelaySeconds when sending a message means the queue-level delay applies.
  • Trying to set delay on FIFO queues without enabling delay support will fail.
python
Wrong:

sqs.send_message(
    QueueUrl=queue_url,
    MessageBody='Test',
    DelaySeconds=1000  # Invalid, exceeds max 900
)

Right:

sqs.send_message(
    QueueUrl=queue_url,
    MessageBody='Test',
    DelaySeconds=300  # Valid delay
)
📊

Quick Reference

SettingDescriptionValid Range
DelaySeconds (Queue Attribute)Default delay for all messages in the queue0 to 900 seconds
DelaySeconds (SendMessage Parameter)Delay for individual message overriding queue delay0 to 900 seconds
Maximum DelayMaximum allowed delay for messages900 seconds (15 minutes)

Key Takeaways

Set DelaySeconds between 0 and 900 seconds to delay message visibility in SQS.
Queue-level delay applies to all messages unless overridden by message-level delay.
Message-level DelaySeconds overrides the queue delay for that specific message.
FIFO queues require delay support enabled to use DelaySeconds.
Delays longer than 900 seconds are not allowed and cause errors.