Skip to content
This repository was archived by the owner on Oct 1, 2023. It is now read-only.
/ nestjs-sqs Public archive
forked from ssut/nestjs-sqs

A project to make SQS easier to use and control some required flows with NestJS.

License

Notifications You must be signed in to change notification settings

lemonade-hq/nestjs-sqs

This branch is 3 commits ahead of, 29 commits behind ssut/nestjs-sqs:master.

Folders and files

NameName
Last commit message
Last commit date
Sep 29, 2021
Sep 29, 2021
Sep 29, 2021
Sep 29, 2021
Aug 10, 2020
Aug 10, 2020
Aug 10, 2020
Sep 29, 2021
Sep 29, 2021
Aug 10, 2020
Aug 10, 2020
Aug 10, 2020
Aug 10, 2020
Oct 1, 2023
Aug 10, 2020
Aug 10, 2020
Sep 29, 2021
Sep 27, 2023
Aug 10, 2020
Sep 29, 2021

Repository files navigation

DEPRECATION NOTICE

This fork of the @ssut/nestjs-sqs package is no longer needed or actively maintained. It was created originally in order to upgrade to AWS SDK 3 but the original package is now upgraded as well.

We recommend that you switch to using the original package maintained by the author @ssut - @ssut/nestjs-sqs.

nestjs-sqs

Test npm version

Tested with: AWS SQS and ElasticMQ.

Nestjs-sqs is a project to make SQS easier to use and control some required flows with NestJS. This module provides decorator-based message handling suited for simple use.

This library internally uses bbc/sqs-producer and bbc/sqs-consumer, and implements some more useful features on top of the basic functionality given by them.

Installation

$ npm i --save @ssut/nestjs-sqs

Quick Start

Register module

Just register this module:

@Module({
  imports: [
    SqsModule.register({
      consumers: [],
      producers: [],
    }),
  ],
})
class AppModule {}

Quite often you might want to asynchronously pass module options instead of passing them beforehand. In such case, use registerAsync() method like many other Nest.js libraries.

  • Use factory
SqsModule.registerAsync({
  useFactory: () => {
    return {
      consumers: [],
      producers: [],         
    };
  },
});
  • Use class
SqsModule.registerAsync({
  useClass: SqsConfigService,
});
  • Use existing
SqsModule.registerAsync({
  imports: [ConfigModule],
  useExisting: ConfigService,
});

Decorate methods

You need to decorate methods in your NestJS providers in order to have them be automatically attached as event handlers for incoming SQS messages:

@Injectable()
export class AppMessageHandler {
  @SqsMessageHandler(/** name: */ 'queueName', /** batch: */ false)
  public async handleMessage(message: AWS.SQS.Message) {
  }
  
  @SqsConsumerEventHandler(/** name: */ 'queueName', /** eventName: */ 'processing_error')
  public onProcessingError(error: Error, message: AWS.SQS.Message) {
    // report errors here
  }
}

Produce messages

export class AppService {
  public constructor(
    private readonly sqsService: SqsService,
  ) { }
  
  public async dispatchSomething() {
    await this.sqsService.send(/** name: */ 'queueName', {
      id: 'id',
      body: { ... },
      groupId: 'groupId',
      deduplicationId: 'deduplicationId',
      messageAttributes: { ... },
      delaySeconds: 0,
    });
  }
}

Configuration

See here, and note that we have same configuration as bbc/sqs-consumer's. In most time you just need to specify both name and queueUrl at the minimum requirements.

License

This project is licensed under the terms of the MIT license.

About

A project to make SQS easier to use and control some required flows with NestJS.

Resources

License

Stars

Watchers

Forks

Languages

  • TypeScript 91.3%
  • JavaScript 8.7%