@huguenots-dev/nestjs-cqrs-nats-jetstream
v1.1.0
Published
NestJS CQRS module for NATS JetStream
Downloads
2
Readme
Installation
$ npm i @huguenots-dev/nestjs-cqrs-nats-jetstream
Description
This module enable NestJS CQRS to work with NATS JetStream.
Setup root app module
import { Module } from '@nestjs/common';
import { JetstreamModule } from '@huguenots-dev/nestjs-cqrs-nats-jetstream';
@Module({
imports: [
JetstreamModule.register()
]
})
export class AppModule {}
Setup
Setup NATS JetStream
Create a stream by configuring the subject with a wildcard. Your events will be published with the featureSubjectPrefix
, something like USER.UserLoggedInEvent
. Thus, all events published by the module will be sent to that stream.
$ nats stream add
? Stream Name USER
? Subjects to consume USER.*
? ...
You now need to create one or more consumers. The module can subscribe to one or more, do as you see fit. The name of the consumer makes no difference to the handlers, we only need the delivery target to subscribe.
$ nats consumer add
? Consumer name USER-SERVICE
? Delivery target CONSUMER-user-service
? ...
Setup feature module
import { Module } from '@nestjs/common';
import { CqrsModule } from '@nestjs/cqrs';
import { JetstreamModule } from 'nestjs-cqrs-nats-jetstream';
import {
UserCommandHandlers,
UserCreatedEvent,
UserEventHandlers,
UserQueryHandlers,
} from '../cqrs';
@Module({
imports: [
CqrsModule,
JetstreamModule.registerFeature({
featureSubjectPrefix: 'USER', // Events will be published with this prefix.
subscriptions: [
{
name: "CONSUMER-user-service" // Insert the consumer delivery target
},
],
eventHandlers: {
"USER.UserLoggedInEvent": (data, ack, raw) => new UserLoggedInEvent(data, ack, raw),
"USER.UserRegisteredEvent": (data, ack, raw) => new UserRegisteredEvent(data, ack, raw),
"USER.EmailVerifiedEvent": (data, ack, raw) => new EmailVerifiedEvent(data, ack, raw),
},
}),
],
providers: [
...UserQueryHandlers,
...UserCommandHandlers,
...UserEventHandlers,
],
})
export class UserModule {}
License
This project is MIT licensed. This project is forked from https://github.com/brunonunes/nestjs-cqrs-nats-jetstream