@niur/nestjs-service-bus
v1.1.0
Published
NestJS Azure Service Bus Microservice Transport
Downloads
4,772
Maintainers
Readme
Description
Azure Service Bus is a fully managed enterprise message broker with message queues and publish-subscribe topics (in a namespace). Service Bus is used to decouple applications and services from each other, providing the following benefits:
- Load-balancing work across competing workers
- Safely routing and transferring data and control across service and application boundaries
- Coordinating transactional work that requires a high-degree of reliability
Installation
To start building Azure Service Bus-based microservices, first install the required packages:
$ npm i --save @azure/service-bus @niur/nestjs-service-bus
Overview
To use the Azure Service Bus strategy, pass the following options object to the createMicroservice()
method:
// main.ts
const app = await NestFactory.createMicroservice<MicroserviceOptions>(AppModule, {
strategy: new AzureServiceBusServer({
connectionString: 'Endpoint=sb://<Name>.servicebus.windows.net/;SharedAccessKeyName=<SharedAccessKeyName>;SharedAccessKey=<SharedAccessKey>',
options: {}
}),
});
Options
The Azure Service Bus strategy exposes the properties described below.
Client
@Module({
imports: [
AzureServiceBusModule.forRoot([
{
name: 'SB_CLIENT',
connectionString: 'Endpoint=sb://<Name>.servicebus.windows.net/;SharedAccessKeyName=<SharedAccessKeyName>;SharedAccessKey=<SharedAccessKey>',
options: {},
},
]),
]
...
})
// or
@Module({
imports: [
AzureServiceBusModule.forRootAsync([
{
name: 'SB_CLIENT',
useFactory: (configService: ConfigService) => ({
connectionString: configService.get('connectionString'),
options: {}
}),
inject: [ConfigService],
},
]),
]
...
})
@Injectable()
constructor(
@Inject('SB_CLIENT') private readonly sbClient: AzureServiceBusClientProxy,
) {}
Producer
Event-based
const pattern = {
name: 'sample-topic', // topic name
options: {}
}; // queue name
const data = {
body: 'Example message'
};
this.sbClient.send(pattern, data).subscribe((response) => {
console.log(response); // reply message
});
Message-based
const pattern = {
name: 'sample-topic', // topic name
options: {}
}; // queue name
const data = {
body: 'Example message'
};
this.sbClient.emit(pattern, data);
Consumer
To access the original Azure Service Bus message use the Subscription
decorator as follows:
@Subscription({
topic: 'sample-topic',
subscription: 'sample-subscription',
receiveMode: 'peekLock', // or receiveAndDelete
})
getMessages(@Payload() message: ServiceBusMessage) {
console.log(message);
}
Options
Stay in touch
- Author - Niurmiguel
License
Nestjs Azure Service Bus is MIT licensed.