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.
This service is built with Node (v18.12.1
using npm@8.13.2
) and NestJS.
npm install @softrizon/nestjs-gcp-pubsub
- 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);
}
}
- 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...
}
}
Visit the @google-cloud/pubsub repository to learn more about its key features, configurations, limitations, and API.
Developed by Softrizon.
This project is MIT-licensed.