How to Receive Messages from AWS SQS Queues Easily
To receive messages from an AWS SQS queue, use the
ReceiveMessage API call specifying the queue URL. This call returns messages that you can process, then delete with DeleteMessage to avoid reprocessing.Syntax
The basic syntax to receive messages from an SQS queue involves calling the ReceiveMessage API with parameters like QueueUrl, MaxNumberOfMessages, and WaitTimeSeconds.
- QueueUrl: The URL of the SQS queue to receive messages from.
- MaxNumberOfMessages: The maximum number of messages to return (up to 10).
- WaitTimeSeconds: How long to wait for messages if the queue is empty (long polling).
json
{
QueueUrl: "string",
MaxNumberOfMessages?: number, // 1-10
WaitTimeSeconds?: number, // 0-20
VisibilityTimeout?: number // seconds
}Example
This example shows how to receive messages from an SQS queue using AWS SDK for JavaScript (v3). It receives up to 5 messages, prints their content, and deletes them to prevent reprocessing.
javascript
import { SQSClient, ReceiveMessageCommand, DeleteMessageCommand } from "@aws-sdk/client-sqs"; const sqsClient = new SQSClient({ region: "us-east-1" }); const queueUrl = "https://sqs.us-east-1.amazonaws.com/123456789012/MyQueue"; async function receiveMessages() { try { const receiveParams = { QueueUrl: queueUrl, MaxNumberOfMessages: 5, WaitTimeSeconds: 10 }; const data = await sqsClient.send(new ReceiveMessageCommand(receiveParams)); if (!data.Messages || data.Messages.length === 0) { console.log("No messages to receive."); return; } for (const message of data.Messages) { console.log("Received message:", message.Body); // Delete message after processing const deleteParams = { QueueUrl: queueUrl, ReceiptHandle: message.ReceiptHandle }; await sqsClient.send(new DeleteMessageCommand(deleteParams)); console.log("Deleted message with ID:", message.MessageId); } } catch (err) { console.error("Error receiving messages:", err); } } receiveMessages();
Output
Received message: Hello from SQS!
Deleted message with ID: 12345-abcde-67890
Received message: Another message
Deleted message with ID: 67890-fghij-12345
Common Pitfalls
- Not deleting messages after processing causes them to reappear after visibility timeout.
- Using
MaxNumberOfMessagesgreater than 10 will cause errors. - Not setting
WaitTimeSecondsresults in short polling, which may miss messages and increase costs. - Ignoring
ReceiptHandlewhen deleting messages will fail deletion.
javascript
/* Wrong: Not deleting message after receiving */ const receiveParams = { QueueUrl: queueUrl, MaxNumberOfMessages: 1 }; const data = await sqsClient.send(new ReceiveMessageCommand(receiveParams)); console.log(data.Messages[0].Body); // Message will reappear after visibility timeout /* Right: Delete message after processing */ const deleteParams = { QueueUrl: queueUrl, ReceiptHandle: data.Messages[0].ReceiptHandle }; await sqsClient.send(new DeleteMessageCommand(deleteParams));
Quick Reference
Remember these key points when receiving messages from SQS:
- Use
ReceiveMessagewithQueueUrlandMaxNumberOfMessages(max 10). - Set
WaitTimeSecondsfor long polling to reduce empty responses. - Always delete messages after processing using
DeleteMessageand the message'sReceiptHandle. - Handle errors gracefully to avoid losing messages.
Key Takeaways
Use ReceiveMessage API with QueueUrl and MaxNumberOfMessages to get messages from SQS.
Set WaitTimeSeconds for long polling to efficiently wait for messages.
Always delete messages after processing using DeleteMessage and ReceiptHandle.
MaxNumberOfMessages cannot exceed 10 per request.
Handle errors and empty responses to build reliable message consumers.