Natty Precise Maverick

    @ssut/nestjs-sqs
    TypeScript icon, indicating that this package has built-in type declarations

    1.3.0 • Public • Published

    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.

    Keywords

    none

    Install

    npm i @ssut/nestjs-sqs

    DownloadsWeekly Downloads

    27,617

    Version

    1.3.0

    License

    MIT

    Unpacked Size

    72.8 kB

    Total Files

    18

    Last publish

    Collaborators

    • ssut