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
DelaySecondsabove 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
DelaySecondswhen 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
| Setting | Description | Valid Range |
|---|---|---|
| DelaySeconds (Queue Attribute) | Default delay for all messages in the queue | 0 to 900 seconds |
| DelaySeconds (SendMessage Parameter) | Delay for individual message overriding queue delay | 0 to 900 seconds |
| Maximum Delay | Maximum allowed delay for messages | 900 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.