nestjs-sqs
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
```shell script $ npm i --save @ssut/nestjs-sqs## Quick Start
### Register module
Just register this module:
```ts
@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 bothname
and queueUrl
at the minimum requirements.