Created
December 29, 2021 15:56
-
-
Save dmitry-tuzenkov/77ed79b3695ad8de7e0be8a2695f6b86 to your computer and use it in GitHub Desktop.
Simple AWS SQS wrapper
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const assert = require('assert') | |
const debug = require('debug')('app:aws-sqs') | |
const { | |
SQSClient, | |
DeleteMessageCommand, | |
SendMessageCommand, | |
ReceiveMessageCommand, | |
} = require('@aws-sdk/client-sqs') | |
const { pack } = require('./utils-data') | |
module.exports = ({ | |
accessKeyId, | |
secretAccessKey, | |
region = 'eu-central-1', | |
}) => { | |
assert(accessKeyId, 'Parameter "accessKeyId" is required') | |
assert(secretAccessKey, 'Parameter "secretAccessKey" is required') | |
const awsQueueClient = new SQSClient({ region, accessKeyId, secretAccessKey }) | |
debug('Initialized aws sqs with %O', { | |
accessKeyId, | |
secretAccessKey, | |
region, | |
}) | |
const sendMessage = async (queueUrl, message) => { | |
const payload = { | |
QueueUrl: queueUrl, | |
DelaySeconds: 0, | |
VisibilityTimeout: 60, | |
MessageBody: pack(message), | |
} | |
debug('Try to send message to aws-sqs queue %O', payload) | |
const result = await awsQueueClient.send(new SendMessageCommand(payload)) | |
debug('Got response from send aws-sqs message %O', result) | |
return result | |
} | |
const readMessages = async (queueUrl, { count = 10, waitTime = 10 } = {}) => { | |
const payload = { | |
QueueUrl: queueUrl, | |
MaxNumberOfMessages: count, | |
WaitTimeSeconds: waitTime, | |
} | |
debug('Try to read messages from aws-sqs queue %O', payload) | |
const result = await awsQueueClient.send(new ReceiveMessageCommand(payload)) | |
debug('Got response from read aws-sqs message %O', result) | |
return result | |
} | |
const deleteMessage = async (queueUrl, { ReceiptHandle }) => { | |
debug('Try to delete message to aws-sqs queue (%s): %O', queueUrl, { | |
ReceiptHandle, | |
}) | |
const result = await awsQueueClient.send( | |
new DeleteMessageCommand({ | |
QueueUrl: queueUrl, | |
ReceiptHandle: ReceiptHandle, | |
}) | |
) | |
debug('Got response from delete aws-sqs message %O', result) | |
return result | |
} | |
return { | |
deleteMessage, | |
sendMessage, | |
readMessages, | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const pack = (obj) => Buffer.from(JSON.stringify(obj)).toString('base64') | |
const unpack = (value) => { | |
const raw = Buffer.from(value, 'base64').toString('utf8') | |
try { | |
return JSON.parse(raw) | |
} catch (ex) { | |
console.error(`Unable to unpack ${raw} seems corrupted`) | |
console.error(ex) | |
return {} | |
} | |
} | |
module.exports = { | |
pack, | |
unpack | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment