Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon How do I set up long polling for an SQS queue
    Amazon SQS long polling AWS SQS receive message wait time SQS queue setup boto3 SQS long polling configuration


How do I set up long polling for an SQS queue


here are the key steps to set up long polling for an Amazon SQS queue:

Enabling Long Polling When Creating a Queue

To enable long polling when creating a new SQS queue, you can set the `ReceiveMessageWaitTimeSeconds` attribute when creating the queue:


import boto3

# Create SQS client
sqs = boto3.client('sqs')

# Create a SQS queue with long polling enabled
response = sqs.create_queue(
    QueueName='SQS_QUEUE_NAME',
    Attributes={'ReceiveMessageWaitTimeSeconds': '20'}
)

print(response['QueueUrl'])

This will create a new SQS queue with long polling enabled, using a wait time of 20 seconds.

Enabling Long Polling on an Existing Queue

To enable long polling on an existing SQS queue, you can use the `set_queue_attributes` method to update the `ReceiveMessageWaitTimeSeconds` attribute:


import boto3

# Create SQS client
sqs = boto3.client('sqs')

queue_url = 'SQS_QUEUE_URL'

# Enable long polling on an existing SQS queue
sqs.set_queue_attributes(
    QueueUrl=queue_url,
    Attributes={'ReceiveMessageWaitTimeSeconds': '20'}
)

This will update the existing queue to enable long polling with a 20 second wait time.

Enabling Long Polling When Receiving Messages

You can also enable long polling when receiving messages from an SQS queue by setting the `WaitTimeSeconds` parameter when calling the `receive_message` method:


import boto3

# Create SQS client
sqs = boto3.client('sqs')

queue_url = 'SQS_QUEUE_URL'

# Long poll for message on provided SQS queue
response = sqs.receive_message(
    QueueUrl=queue_url,
    AttributeNames=['SentTimestamp'],
    MaxNumberOfMessages=1,
    MessageAttributeNames=['All'],
    WaitTimeSeconds=20
)

print(response)

This will enable long polling with a 20 second wait time when receiving messages from the specified SQS queue.

The key points are:

1. Set the `ReceiveMessageWaitTimeSeconds` attribute when creating a new queue or updating an existing one.
2. Use a non-zero value, up to the maximum of 20 seconds, to enable long polling.
3. You can also enable long polling when receiving messages by setting the `WaitTimeSeconds` parameter.

Enabling long polling can help reduce the number of empty responses and lower costs by allowing SQS to wait for messages to become available before responding.

Citations:
[1] https://forum.serverless.com/t/how-to-create-amazon-sqs-long-polling/6726
[2] https://boto3.amazonaws.com/v1/documentation/api/1.9.42/guide/sqs-example-long-polling.html
[3] https://boto3.amazonaws.com/v1/documentation/api/latest/guide/sqs-example-long-polling.html
[4] https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-short-and-long-polling.html
[5] https://flofuchs.com/taking-a-look-at-aws-sqs-short-and-long-polling