Skip to content

How can we work with AWS SNS (Simple Notification Service), SQS (Simple Queue Service), andAWS EventBridge as a Message Broker using NodeJS in a EDA (Event-Driven Architecture)

License

Notifications You must be signed in to change notification settings

alexalvess/event-message-broker

Repository files navigation

Message Bus SDK for AWS Resources

NPM version

Table of Contents

Getting Started

1. Install

npm install aws-message-bus-package

2. Config File

You need to create a config.json file in your root/src project and input some AWS informations, like bellow:

{
    "host": "localhost",
    "port": 4566,
    "region": "eu-west-2",
    "account": "000000000000",
    "snsArn": "arn:aws:sns",
    "sqsArn": "arn:aws:sqs",
    "awsHost": "localhost.localstack.cloud",
    "tags": [
        { "Key": "team", "Value": "your-team-name" },
        { "Key": "appName", "Value": "your-app-name" }
    ],
    "testMode": false
}

3. Sample Usage

const { Infrastructure } = require('aws-message-bus-package');

async () => await Infrastructure.createQueue('your-queue-name');
async () => await Infrastructure.createTopic('your-topic-name');
async () => await Infrastructure.bindTopic('your-topic-name', 'your-queue-name');

API

Infrastructure.createQueue('queue-name')

Create a new SQS queue

Infrastructure.bindTopic('topic-name', 'queue-name')

  • Create a new SNS topic, if not exists
  • Subscribe a SNS topic in a SQS queue

Service.publishMessage('topic-name', {CONTENT})

Send a message to SNS topic to do broadcast

  • Content: any kind of type/object, this will be transformed into a JSON format

Service.sendMessage('queue-name', {CONTENT}, {PARAMS})

Send a message to SQS queue direct

  • Content: any kind of type/object, this will be transformed into a JSON format
  • Params: SQS.Types.SendMessageRequest
    • You don't need to inform:
      • MessageBody
      • MessageAttributes
      • QueueUrl

Service.scheduleMessage('topic-name', {CONTENT}, [SCHEDULED_DATE])

Send a message to EventBridge informing the SNS topic with the destination. This message will be consumed when it arrives on the scheduled date.

  • Content: any kind of type/object, this will be transformed into a JSON format

Service.handleConsumerMessage('queue-name', {RESILIENCE_PARAMS})

Handle a consumer to consume queue messages

  • Resilience Params:
    • maxRetryCount: max number of attempts until send to DLQ
    • delaySeconds: the time that will wait between attempts

About

How can we work with AWS SNS (Simple Notification Service), SQS (Simple Queue Service), andAWS EventBridge as a Message Broker using NodeJS in a EDA (Event-Driven Architecture)

Topics

Resources

License

Stars

Watchers

Forks