UNPKG

sqs-producer

Version:

Enqueues messages onto a given SQS queue

171 lines (131 loc) 4.86 kB
# sqs-producer [![NPM downloads](https://img.shields.io/npm/dm/sqs-producer.svg?style=flat)](https://npmjs.org/package/sqs-producer) [![Build Status](https://github.com/bbc/sqs-producer/actions/workflows/test.yml/badge.svg)](https://github.com/bbc/sqs-producer/actions/workflows/test.yml) Enqueues messages onto a given SQS queue. ## Installation To install this package, enter the following command into your terminal (or the variant of whatever package manager you are using): ``` npm install sqs-producer ``` ### Node version We will only support Node versions that are actively or security supported by the Node team. You can find the list of versions that are actively supported [here](https://nodejs.org/en/about/releases/). ## Documentation Visit [https://bbc.github.io/sqs-producer/](https://bbc.github.io/sqs-producer/) for the full API documentation. ## Usage ```js import { Producer } from "sqs-producer"; import { SQSClient } from "@aws-sdk/client-sqs"; // create simple producer const producer = Producer.create({ queueUrl: "https://sqs.eu-west-1.amazonaws.com/account-id/queue-name", region: "eu-west-1", }); // send messages to the queue await producer.send(["msg1", "msg2"]); // get the current size of the queue const size = await producer.queueSize(); console.log(`There are ${size} messages on the queue.`); // send a message to the queue with a specific ID (by default the body is used as the ID) await producer.send([ { id: "id1", body: "Hello world", }, ]); // send a message to the queue with // - delaySeconds (must be an number contained within 0 and 900) // - messageAttributes await producer.send([ { id: "id1", body: "Hello world with two string attributes: attr1 and attr2", messageAttributes: { attr1: { DataType: "String", StringValue: "stringValue" }, attr2: { DataType: "Binary", BinaryValue: new Buffer("binaryValue") }, }, }, { id: "id2", body: "Hello world delayed by 5 seconds", delaySeconds: 5, }, ]); // send a message to a FIFO queue // // note that AWS FIFO queues require two additional params: // - groupId (string) // - deduplicationId (string) // // deduplicationId can be excluded if content-based deduplication is enabled // // https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queue-recommendations.html await producer.send({ id: "testId", body: "Hello world from our FIFO queue!", groupId: "group1234", deduplicationId: "abcdef123456", // typically a hash of the message body }); // send messages to a standard queue with groupId for fair queue behavior // // Fair queues automatically mitigate noisy neighbor impact in multi-tenant queues // by using groupId to identify tenants and ensure fair resource allocation // // https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-fair-queues.html await producer.send([ { id: "msg1", body: "Message from tenant A", groupId: "tenant-a", }, { id: "msg2", body: "Message from tenant B", groupId: "tenant-b", }, ]); ``` ### Credentials By default the producer will look for AWS credentials in the places [specified by the AWS SDK](https://docs.aws.amazon.com/AWSJavaScriptSDK/guide/node-configuring.html#Setting_AWS_Credentials). The simplest option is to export your credentials as environment variables: ```bash export AWS_SECRET_ACCESS_KEY=... export AWS_ACCESS_KEY_ID=... ``` If you need to specify your credentials manually, you can use a pre-configured instance of the [SQS Client](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-sqs/classes/sqsclient.html) client. ```js import { Producer } from "sqs-producer"; import { SQSClient } from "@aws-sdk/client-sqs"; // create simple producer const producer = Producer.create({ queueUrl: "https://sqs.eu-west-1.amazonaws.com/account-id/queue-name", region: "eu-west-1", sqs: new SQSClient({ region: "my-region", credentials: { accessKeyId: "yourAccessKey", secretAccessKey: "yourSecret", }, }), }); // send messages to the queue await producer.send(["msg1", "msg2"]); ``` ## Development ### Test ```bash npm test ``` ### Coverage For coverage report, run the command: ```bash npm run coverage ``` ### Lint To check for problems using ESLint ```bash npm run lint ``` ## Contributing We welcome and appreciate contributions for anyone who would like to take the time to fix a bug or implement a new feature. But before you get started, [please read the contributing guidelines](https://github.com/bbc/sqs-producer/blob/main/.github/CONTRIBUTING.md) and [code of conduct](https://github.com/bbc/sqs-producer/blob/main/.github/CODE_OF_CONDUCT.md). ## License SQS Producer is distributed under the Apache License, Version 2.0, see [LICENSE](./LICENSE) for more information.