1.0.1 • Published 9 months ago

@flpc/nestjs-azure-service-bus v1.0.1

Weekly downloads
-
License
UNLICENSED
Repository
github
Last release
9 months ago

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

License

Nestjs Azure Service Bus is MIT licensed.