A Custom Transport strategy for Cloud Pub/Sub in Nest microservices.
TODO: in order to open-source it for NestJs, we must use
loadPackage
(fromServer
) to load@google-cloud/pubsub
dynamically instead of having it installed in the dependenices of the project. Also, all types used from this package should be duplicated into local types/interfaces.
yarn add @gojob/nest-cloud-pub-sub-transport
# or
npm install @gojob/nest-cloud-pub-sub-transport
Here is an example of implementation in your Nest application:
async function bootstrap() {
const app = await NestFactory.create(AppModule);
const configService = app.get(ConfigService);
app.connectMicroservice({
strategy: new CloudServerPubSub({
// "clientConfig": configuration passed "as is" to the Cloud PubSub client
clientConfig: {
keyFile: configService.get('GCP_KEY_FILE_PUBSUB'),
},
// "options": custom options, specific to this package
options: {
logger: app.get(LOGGER),
// useful when your app is using a single topic & subscription
defaultTopic: configService.get('DEFAULT_PUB_SUB_TOPIC'),
defaultSubscription: configService.get('DEFAULT_PUB_SUB_SUBSCRIPTION'),
},
}),
});
await app.startAllMicroservices();
await app.listen(3000);
}
Then use @EventPattern
from @nestjs/microservices
to decorate the event handlers which will be called when a new Pub/Sub message is received in your target topic(s).
Command | Action |
---|---|
yarn compile |
Ensure the TypeScript code can be compiled using tsc |
yarn build |
Build the project (transpile the code to JavaScript) |
yarn lint |
Lint the code (ESLint ) |
yarn test |
Run unit tests |
yarn integration |
Run integration tests |