@flpc/nestjs-azure-service-bus
v1.0.1
Published
NestJS Azure Service Bus Microservice Transport & Server
Downloads
66
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 @flpc/nestjs-azure-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([
{
inject: [ConfigService],
name: SB_CLIENT,
useFactory: (configService: ConfigService) => ({
connectionString: configService.get('connectionString'),
options: {}
}),
inject: [ConfigService],
},
]),
]
...
})
@Injectable()
constructor(
@Inject(SB_CLIENT) private readonly sbClientProxy: AzureServiceBusClientProxy,
) {}
Custom Client
Same interface AzureServiceBusModule
but, CustomAzureServiceBusClient
implements ServiceBusClientProxy
to send message.
This is simple client and not use ClientProxy
constructor(
@Inject(SB_CLIENT) private readonly sbClientProxy: AzureServiceBusClientProxy,
) {}
Producer
Event-based
// queue/topic properties
const pattern = {
name: 'sample-queueOrTopic', // queue/topic name
options: {}, //OperationOptions
};
// payload message
const data = {
body: 'Example message',
//options message (subject, ... etc)
};
this.sbClient.send(pattern, data).subscribe((response) => {
console.log(response); // reply message
});
Message-based
// queue/topic properties
const pattern = {
name: 'sample-queueOrTopic', // queue/topic name
options: {}, //OperationOptions
};
// payload message
const data = {
body: 'Example message',
//some options message (subject, ... etc)
};
this.sbClient.emit(pattern, data);
Topic-Message-based
// topic
const topic = 'TOPIC';
// payload message
const data = {
subscription: 'postsubscription', //equivalent to subject
body: 'Example message',
//some options message (reply, to, ... etc)
};
this.sbClient.sendTopicSubscription(topic, data);
Consumer
To access the original Azure Service Bus message use the Subscription
decorator as follows:
@Subscription({
topic: 'sample-queueOrTopic',
subscription: 'sample-subscription',
receiveMode: 'peekLock', // or receiveAndDelete
})
getMessages(@Payload() message: ServiceBusMessage) {
console.log(message);
}
Options
Stay in touch
- Author - Filipe Campos
License
Nestjs Azure Service Bus is MIT licensed.