Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@mirasys/nestjs-jetstream-transporter

A custom transporter for integrating NATS Jetstream with NestJS

nats, nestjs, jetstream, transporter

readme

nestjs-jetstream-transporter

A custom transporter for integrating NATS with NestJS microservices. It provides an implementation for receiving and sending messages using the NATS messaging system.

Installation

npm i @mirasys/nestjs-jetstream-transporter

NestJS NATS Config

In app.module.ts, import the NatsService from the lib, provide NAST connection options and NAST consumer options, then put these into the App providers.

@Module({
  imports: [],
  controllers: [AppController],
  providers: [
    {
      provide: 'NATS_CONNECTION_OPTIONS',
      useValue: <ConnectionOptions>
        servers: ['nats://eventbus: 4222'],
        name: `${process.env.npm_package_name}`,
        noEcho: true,
        debug: false,
    },
    {
      provide: 'NATS_CONSUMER_OPTIONS',
      useValue: <ConsumerConfig>{
        deliver_group: process.env.npm_package_name,
        max_ack_pending: 100,
        ack_policy: AckPolicy. Explicit,
      }б
    },
    AppService,
    NatsService,
  ]
})
export class AppModule {}

In main.ts, connect the microservice with NATS strategy, like so:

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import {
  FastifyAdapter,
  NestFastifyApplication,
} from '@nestjs/platform-fastify';
import { NatsService } from './nats-streaming';

async function bootstrap() {
  const app = await NestFactory.create<NestFastifyApplication>(
    AppModule,
    new FastifyAdapter(),
  );

  app.connectMicroservice({
    strategy: app.get (NatsService).strategy,
  });
  await app.startAllMicroservices();
  await app.listen (3000, ¹0.0.0.0¹);
} 
bootstrap();

NestJS Producer example

To publish events, we inject the NatsService and call the publish method with the event topic and event data:

constructor(
    private readonly natsService: NatsService,
) {}

async someFunction() {
  const data = {
    name: 'Mirasys Oy',
    address: 'Vaisalantie 2, 02130 Espoo, Finland',
  };

  await this.orgService.save(data);

  this.natsService.publish('organization.added', JSON.stringify(data));
}

NestJS Consumer example

To subscribe to events, we use the @EventPattern decorator, note that we need to call the ack() method when finish processing the event.

import { Ctx, EventPattern, Payload } from '@nestjs/microservices';
import { JsMsg } from 'nats';
import { NatsService } from './nats-streaming';

@EventPattern('organization.fetched')
handleOrgFetched(@Payload() data: any, @Ctx() context: JsMsg) {
    console.log('data:', data);
    context.ack();
}

changelog

Changelog

All notable changes to this project will be documented in this file. See standard-version for commit guidelines.

1.1.1 (2024-10-07)

1.1.0 (2023-11-30)

Features

1.0.12 (2023-11-30)

1.0.11 (2023-11-30)

1.0.10 (2023-11-30)

1.0.9 (2023-11-29)

1.0.8 (2023-09-26)

1.0.7 (2023-09-04)

1.0.6 (2023-09-04)

1.0.5 (2023-09-04)

1.0.4 (2023-09-04)

Bug Fixes

1.0.3 (2023-09-04)

1.0.2 (2023-09-04)

Bug Fixes

  • tests: transpile code for Jest compatibility (fc43a83)

1.0.1 (2023-09-04)

1.0.0 (2023-08-28)

Features

  • package.json: update dependencies (fbd112e)
  • package.json: update dependencies (632002a)
  • tests: update test file (4892d4d)
  • tests: update test file for NestJS v8 changes (5df19fe)
  • tests: update test file: skip tests (c862b90)

Bug Fixes

  • ci: incorrect node version in publish-gpr (ac005f7)
  • tests: transpile code for Jest compatibility (f122e27)
  • tests: transpile code for Jest compatibility (e78f6a2)
  • tests: transpile code for Jest compatibility (4fbf7bb)
  • tests: transpile code for Jest compatibility (9065b2d)
  • tests: transpile code for Jest compatibility (1323358)
  • tests: transpile code for Jest compatibility (c6f4ef9)