nest-azure-service-bus
v1.0.1
Published
NestJS microservices transport for Azure Service Bus
Maintainers
Readme
NestJS Azure Service Bus Microservices Transport
A production-ready NestJS microservices transport layer for Azure Service Bus that provides seamless integration between NestJS microservices patterns and Azure Service Bus messaging.
Features
- ✅ Full NestJS Microservices Compatibility - Works with
@MessagePatternand@EventPattern - ✅ Azure Service Bus Transport - Native Azure Service Bus integration
- ✅ Request-Response Messaging - Using
send()andMessagePattern - ✅ Event-Driven Messaging - Using
emit()andEventPattern - ✅ TypeScript Support - Fully typed for better development experience
- ✅ Async Configuration - Support for ConfigService and environment variables
- ✅ Error Handling & Retries - Built-in retry logic and error handling
- ✅ Connection Management - Automatic connection lifecycle management
- ✅ Decorator Support - Use standard NestJS microservice decorators
Installation
npm install nest-azure-service-busPeer Dependencies
{
"@azure/service-bus": "^7.9.5",
"@nestjs/common": "^11.0.1",
"@nestjs/microservices": "^11.1.6",
}Quick Start
- Setup Module
// app.module.ts
import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { AzureServiceBusModule } from '@your-org/azure-service-bus';
@Module({
imports: [
ConfigModule.forRoot(),
AzureServiceBusModule.forRootAsync({
useFactory: (config: ConfigService) => ({
connectionString: config.get('AZURE_SERVICE_BUS_CONNECTION_STRING'),
queueName: config.get('AZURE_SERVICE_BUS_QUEUE', 'nestjs-app'),
}),
inject: [ConfigService],
}),
],
})
export class AppModule {}- Environment Configuration
AZURE_SERVICE_BUS_CONNECTION_STRING=Endpoint=sb://your-namespace.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=your-key
AZURE_SERVICE_BUS_QUEUE=nestjs-app- Create Message Handlers
// users.controller.ts
import { Controller } from '@nestjs/common';
import { MessagePattern, EventPattern } from '@nestjs/microservices';
@Controller()
export class UsersController {
@MessagePattern('user.create')
async createUser(data: any) {
return {
id: '123',
...data,
createdAt: new Date()
};
}
@EventPattern('user.created')
async handleUserCreated(data: any) {
console.log('User created:', data);
}
}- Send Messages
// orders.service.ts
import { Injectable } from '@nestjs/common';
import { AzureServiceBusService } from '@your-org/azure-service-bus';
@Injectable()
export class OrdersService {
constructor(private readonly serviceBus: AzureServiceBusService) {}
async createOrder(orderData: any) {
const user = await this.serviceBus.sendAsync('user.create', orderData);
await this.serviceBus.emitAsync('order.created', user);
return user;
}
}Configuration Options
interface AzureServiceBusOptions {
connectionString: string;
queueName?: string;
retryOptions?: {
maxRetries?: number;
timeoutInMs?: number;
};
}API Reference
- send(pattern: string, data: any): Observable
- sendAsync(pattern: string, data: any): Promise
- emit(pattern: string, data: any): Observable
- emitAsync(pattern: string, data: any): Promise
- isConnected(): boolean
Licenses
This project is licensed under the MIT License - see the LICENSE.md file for details
