Build Amazon SQS-based applications without the boilerplate. SQSUtils provides you with everything you need to poll and send messages to Amazon AWS.
npm install sqs-utils
Create a new SQSUtils
instance and tell it which SQS queue to use:
const SQSUtils = require('sqs-utils');
const queue = new SQSUtils({
queueUrl: 'https://sqs.eu-west-1.amazonaws.com/account-id/queue-name'
});
By default the library will look for AWS credentials in the places specified by the AWS SDK. The simplest option is to export your credentials as environment variables:
export AWS_SECRET_ACCESS_KEY=...
export AWS_ACCESS_KEY_ID=...
Alternatively you can provide your credentials upon creation of any new SQSUtils instance:
const queue = new SQSUtils({
accessKeyId: 'AWS-ACCESS-KEY-ID',
secretAccessKey: 'AWS-ACCESS-KEY',
region: 'AWS-REGION',
queueUrl: 'https://sqs.eu-west-1.amazonaws.com/account-id/queue-name'
});
You can also provide a pre-configured instance of the AWS SQS client:
const queue = new SQSUtils({
aws: new AWS.SQS(),
queueUrl: 'https://sqs.eu-west-1.amazonaws.com/account-id/queue-name'
});
This uses sqs-consumer to continuously poll the queue for messages. Just define a function that receives an SQS message and call a callback when the message has been processed.
queue.listen({
visibilityTimeout: 300,
handleMessage: function(message, done) {
// Do your message handling in here
console.log(message);
// Remove the message from the queue
done();
},
handleError: function(err) {
// Handle errors
console.log(err);
}
});
- The queue is polled continuously for messages using long polling.
- Messages are deleted from the queue once
done()
is called. - Calling
done(err)
with an error object will cause the message to be left on the queue. An SQS redrive policy can be used to move messages that cannot be processed to a dead letter queue.
To stop listening for new messages simply call .stop()
:
queue.stop();
You can also poll the single next message from the queue.
queue.receiveMessage({
visibilityTimeout: 300
}, function(err, data) {
console.log(data);
});
To send new messages to the queue use .sendMessage()
:
queue.sendMessage({
message: { text: 'hello' },
delaySeconds: 0
}, function(err) {
// Error handling here...
});