0.0.1 • Published 1 year ago

@softrizon/gcp-pubsub v0.0.1

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

Google Cloud Pub/Sub Wrapper for NestJS

npm version MIT License

Description

This is a custom transport strategy wrapper for Google Cloud Pub/Sub within the NestJS framework. In other words, it provides a simple way to publish and subscribe to a topic.

Installation

This service is built with Node (v18.12.1 using npm@8.13.2) and NestJS.

npm install @softrizon/nestjs-gcp-pubsub

Usage

Publish messages

  • Module configuration
import { Module } from '@nestjs/common';
import { PubSubModule } from '@softrizon/gcp-pubsub';
import { MessageService } from './message.service';

@Module({
  imports: [
    PubSubModule.forRoot({
      config: { },
    }),
  ],
  providers: [MessageService],
})
export class AppModule {}

NOTE: The config is the same interface as in the @google-cloud/pubsub package.

  • Inject the service (e.g., MessageService) to emit messages.
import { Injectable } from '@nestjs/common';
import { PubSubService } from '@softrizon/gcp-pubsub';

@Injectable()
export class MessageService {
  constructor(private pubsub: PubSubService) {}

  emit<T = any>(pattern: string, data: T): void {
    const emitOptions = {
      message: pattern;
      data: data;
      topic: 'topic-name';
      attributes: {
        format: 'json',
      }
    }
    this.pubsub.emit(emitOptions);
  }
}

Subscribe on messages

  • Server configuration
import { NestFactory } from '@nestjs/core';
import { MicroserviceOptions } from '@nestjs/microservices';
import { PubSubServer } from '@softrizon/gcp-pubsub';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  app.connectMicroservice<MicroserviceOptions>({
    strategy: new PubSubServer({
      config: {  },
    }),
  });

  app.startAllMicroservices();
  await app.listen(3000);
}
bootstrap();

NOTE: The config is the same interface as in the @google-cloud/pubsub package.

  • Register a subscription handler
import { Controller } from '@nestjs/common';
import { MessagePattern, Payload } from '@nestjs/microservices';
import { SubscriptionHandler, Message } from '@softrizon/gcp-pubsub';

@Controller()
export class MessagesEventSubscriber {
  @SubscriptionHandler({ subscription: 'test-subscription', topic: 'test-topic' })
  async doSomething(@Payload() message: Message): Promise<any> | Observable<any> | any {
    // do something with the message...
  }
}

Read more

Visit the @google-cloud/pubsub repository to learn more about its key features, configurations, limitations, and API.

Author

Developed by Softrizon.

License

This project is MIT-licensed.