Skip to content

Instantly share code, notes, and snippets.

@kaushalvivek
Created March 28, 2021 06:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kaushalvivek/2178f1cdedea1ad576a83d9586c1f1ef to your computer and use it in GitHub Desktop.
Save kaushalvivek/2178f1cdedea1ad576a83d9586c1f1ef to your computer and use it in GitHub Desktop.
A function to queue messages to AWS SQS
const aws = require('aws-sdk')
const uuid = require('uuid')
const splitArray = require('split-array')
const sqsConfig = {
apiVersion: "2012-11-05",
accessKeyId: "<sqs-user's ACCESS_KEY_ID here>",
secretAccessKey: "<sqs-user's SECRET_ACCESS_KEY here>",
region: "AWS REGION HERE" // you can see your AWS region in your queue ARN, like:
// arn:aws:sqs:<AWS REGION>:user-id:queue-name
}
aws.config.update(sqsConfig)
const sqs = new aws.SQS({ apiVersion: config.aws.apiVersion })
const queueMessages = async function (messages, queueUrl) {
try {
// only 10 messages can be queued to SQS at one time, hence
// we break our messages into chunks of 10 messages.
const splittedArray = splitArray(messages, 10)
for (const arr of splittedArray) {
const params = {
QueueUrl: queueUrl,
Entries: []
}
arr.forEach(message => {
params.Entries.push({
// Id is a unique ID assigned to each message
// read more about how Id is used in AWS's documentation
Id: uuid.v4(),
MessageBody: JSON.stringify(message)
})
})
await sqs.sendMessageBatch(params).promise()
};
return (201)
} catch (e) {
throw new Error(e.message)
}
}
// Example usage of function:
const messages = [
{
"field1": "this is message 1",
"field2":"X"
},
{
"field1":"this is message 2",
"field2": "Y"
}
]
const response = await queueMessage(messages, "https://<QUEUE_URL_HERE -- copy from SQS console>")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment