UNPKG

sqs-producer-lib

Version:

Reusable AWS SQS producer library for Node.js microservices

63 lines (54 loc) 1.6 kB
// 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;