sqs-producer-lib
Version:
Reusable AWS SQS producer library for Node.js microservices
63 lines (54 loc) • 1.6 kB
JavaScript
// src/SQSClient.js
const AWS = require('aws-sdk');
class SQSClient {
constructor({
accessKeyId,
secretAccessKey,
region = 'us-east-1',
useLocalstack = false,
localstackEndpoint = 'http://localhost:4566',
accountId = '000000000000',
}) {
this.isLocal = useLocalstack;
this.endpoint = useLocalstack
? new AWS.Endpoint(localstackEndpoint)
: undefined;
this.accountId = accountId;
this.region = region;
const config = {
accessKeyId,
secretAccessKey,
region,
sslEnabled: !useLocalstack,
};
this.sqs = new AWS.SQS({
...config,
endpoint: this.endpoint,
s3ForcePathStyle: true,
customUserAgent: 'SQSProducerClass',
});
console.log('SQS Client Initialized:', {
region,
isLocal: this.isLocal,
endpoint: this.endpoint?.href || 'AWS',
});
}
async sendMessage(queueName, messageObject) {
const queueUrl = this.isLocal
?`http://localstack:4566/000000000000/${queueName}`
: `https://sqs.${this.region}.amazonaws.com/${this.accountId}/${queueName}`;
const params = {
QueueUrl: queueUrl,
MessageBody: JSON.stringify(messageObject),
};
try {
const result = await this.sqs.sendMessage(params).promise();
console.log(` Message sent to ${queueName}:`, result.MessageId);
return result;
} catch (err) {
console.error(`Failed to send message to ${queueName}:`, err.message);
throw err;
}
}
}
module.exports = SQSClient;