Nats
π¨ Nats Channel Integration
This extension enables seamless integration between @nestjstools/messaging
and Nats.
π Installation
Install both the core messaging package and the NATS extension:
npm install @nestjstools/messaging @nestjstools/messaging-nats-extension
or
yarn add @nestjstools/messaging @nestjstools/messaging-nats-extension
βοΈ Basic Setup Example
import { Module } from '@nestjs/common';
import { MessagingModule } from '@nestjstools/messaging';
import { MessagingNatsExtensionModule, NatsChannelConfig } from "@nestjstools/messaging-nats-extension";
@Module({
imports: [
MessagingNatsExtensionModule,
MessagingModule.forRoot({
buses: [
{
name: 'nats-event.bus',
channels: ['nats-event'],
},
],
channels: [
new NatsChannelConfig({
name: 'nats-event',
enableConsumer: true,
connectionUris: ['nats://localhost:4222'],
subscriberName: 'nats-core',
}),
],
debug: true,
}),
],
})
export class AppModule {}
π¬ Dispatching Messages
Use @MessageBus
to inject and use the bus:
import { Controller, Get } from '@nestjs/common';
import { IMessageBus, MessageBus, RoutingMessage } from '@nestjstools/messaging';
import { CreateUser } from './application/command/create-user';
@Controller()
export class AppController {
constructor(
@MessageBus('nats-event.bus') private natsMessageBus: IMessageBus,
) {}
@Get('/nats')
createUser(): string {
this.natsMessageBus.dispatch(
new RoutingMessage(
new CreateUser('John FROM Nats'),
'my_app_command.create_user'
)
);
return 'Message sent';
}
}
π§° Message Handler
To handle dispatched messages, use @MessageHandler
:
import { MessageHandler, IMessageHandler } from '@nestjstools/messaging';
import { CreateUser } from '../create-user';
@MessageHandler('my_app_command.create_user')
export class CreateUserHandler implements IMessageHandler<CreateUser> {
async handle(message: CreateUser): Promise<void> {
console.log(message);
// Implement your business logic here
}
}
π Cross-Language Messaging
Enable interoperability with services in other languages:
Publish a Message via NATS.
Include the Routing Header:
messaging-routing-key: my_app_command.create_user
The message will be routed to the corresponding handler automatically.
π Routing Strategy
Routing depends on the subscriberName
:
Static Routing:
Uses
subscriberName
directly as subject.
Wildcard Routing:
Uses
message.messageRoutingKey
for dynamic routing.
subscriberName = 'order.*';
message.messageRoutingKey = 'order.created';
// Publishes to subject: 'order.created'
π οΈ NatsChannel Configuration Options
name
Channel name (e.g., 'nats-event'
).
β
enableConsumer
Whether to consume messages from this channel.
true
connectionUris
Array of NATS server URIs (e.g., ['nats://localhost:4222']
).
β
subscriberName
Queue group / subject name or pattern (e.g., 'order.*'
, 'my-sub'
).
β
Last updated