@digikare/nestjs-azure-eventhub
    TypeScript icon, indicating that this package has built-in type declarations

    1.0.0 • Public • Published

    Nest Logo

    Digikare nestjs-azure-eventhub

    Transport component for NestJS microservice

    The librairies is used and maintained by digikare team. We are open for all contributions!

    Description

    @digikare/nestjs-azure-eventhub is a transport component provide Event Hub into Nest microservice

    Installation

    $ npm install @digikare/nestjs-azure-eventhub
    
    # or yarn
    
    $ yarn add @digikare/nestjs-azure-eventhub

    How to use

    Microservice

    import { EventHubServer } from '@digikare/nestjs-azure-eventhub';
    // other imports {...}
    
    const app = await NestFactory.createMicroservice(ApplicationModule, {
      startegy: new EventHubServer(
        '<connection_string>',        // the connection string
        '<event_hub_name>',           // the event hub name
        '<optional_consumer_group>',  // optionnal: The consumer group, the default value is $Default
      ),
    });

    You can also define a specific partitionId to listen if needed (useful for dev/test env).

    import { EventHubServer } from '@digikare/nestjs-azure-eventhub';
    // other imports {...}
    
    const app = await NestFactory.createMicroservice(ApplicationModule, {
      startegy: new EventHubServer(
        '<connection_string>',          // the connection string
        '<event_hub_name>',             // the event hub name
        '<optional_consumer_group>',    // optionnal: The consumer group, the default value is $Default
        {
          partitionId: '<partition_id>' // optional: the partitionId to listen
        }
      ),
    });

    And now you can use @EventPattern() and @MessagePattern() decorators!

    Checkpoint store

    Since 0.1.2, you can add a checkpoint store, that allow your app to treat pending message.

    You will need an azure account storage in order to make it works.

    import { EventHubServer } from '@digikare/nestjs-azure-eventhub';
    // other imports {...}
    
    const app = await NestFactory.createMicroservice(ApplicationModule, {
      startegy: new EventHubServer(
        '<connection_string>',            // the connection string
        '<event_hub_name>',               // the event hub name
        '<optional_consumer_group>',      // optionnal: The consumer group, the default value is $Default
        {
          partitionId: '<partition_id>',  // optional: the partitionId to listen
          checkpointStore: {
            connectionString: '<checkpoint_account_storage_connection_string>',
            containerName: '<checkpoint_container_name>',
          }
        }
      ),
    });

    Wildcard support on pattern

    Wildcard support on pattern can be usefull. When you receive a message, the client will cut out the topic of the event in order to check if handlers are subscribed to these topics.

    The restriction at the moment:

    • The wildcard char '' must be at the end (eg: audit.*, 'my.scope.on.`)
    • The split char is '.'

    To enable, just set wildcardSuppprt option to true

    import { EventHubServer } from '@digikare/nestjs-azure-eventhub';
    // other imports {...}
    
    const app = await NestFactory.createMicroservice(ApplicationModule, {
      startegy: new EventHubServer(
        '<connection_string>',            // the connection string
        '<event_hub_name>',               // the event hub name
        '<optional_consumer_group>',      // optionnal: The consumer group, the default value is $Default
        {
          partitionId: '<partition_id>',  // optional: the partitionId to listen
          wildcardSupport: true,          // <<== Support wildcard
        }
      ),
    });

    Examples

    If you send an event on the following topic : event.subevent.topic The handlePatternMessage will test the following topics :

    • *
    • event.*
    • event.subevent
    • event.subevent.*
    • event.subevent.topic

    Client

    import { ConfigModule, ConfigService } from '@nestjs/config';
    import { EventHubClient } from '@digikare/nestjs-azure-eventhub';
    
    @Module({
      imports: [
        ConfigModule,
      ],
      providers: {
        {
          provide: 'EVENT_HUB_CLIENT',
          inject: [ConfigService],
          useFactory: (configService: ConfigService) => {
            const connectionString = configService.get<string>('EVENT_HUB_CONNECTION_STRING');
            const eventHubName = configService.get<string>('EVENT_HUB_NAME');
            const partitionId = configService.get<string>('EVENT_HUB_PARTITION_ID'); // optionnal
    
            return new EventHubClient(
              connectionString,
              {
                eventHubName: eventHubName,
                partitionId: partitionId, // optional - define partitionId if you want sent to only
              }
            );
          },
        }
      },
    })

    Hint: When you define a partitionId, the configuration will override every message/event to send. Even if you provide a partitionID or partitionKey.

    Build

    # To install dependencies, first go to root monorepo and run yarn
    $ cd ../../
    $ yarn
    
    # development
    $ cd packages/nestjs-azure-eventhub
    $ yarn build
    
    # watch mode
    $ cd packages/nestjs-azure-eventhub
    $ npm run dev

    License

    This library is under MIT licensed.

    Keywords

    none

    Install

    npm i @digikare/nestjs-azure-eventhub

    DownloadsWeekly Downloads

    166

    Version

    1.0.0

    License

    none

    Unpacked Size

    56.2 kB

    Total Files

    26

    Last publish

    Collaborators

    • kakaruto
    • spike008t
    • workfel