[![Test](https://github.com/ssut/nestjs-sqs/workflows/Test/badge.svg)](https://github.com/ssut/nestjs-sqs/actions?query=workflow%3ATest) [![npm version](https://badge.fury.io/js/%40ssut%2Fnestjs-sqs.svg)](https://badge.fury.io/js/%40ssut%2Fnestjs-sqs)

Downloads in past


124251.3.08 months ago3 years agoMinified + gzip package size for @ssut/nestjs-sqs in KB


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.


```shell script $ npm i --save @ssut/nestjs-sqs
## Quick Start

### Register module

Just register this module:

  imports: [
      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

  useFactory: () => {
    return {
      consumers: [],
      producers: [],         

  • Use class

  useClass: SqsConfigService,

  • Use existing

  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:
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,


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.


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