Nomenclature Predictably Misunderstood

    @yoctol/message-queue
    TypeScript icon, indicating that this package has built-in type declarations

    0.1.2 • Public • Published

    Yoctol Message Queue

    The package provide two pattern of message queue:

    Usage

    $ yarn add @yoctol/message-queue

    Queue

    The queue has two driver: 'memory' and 'rabbitmq'.

    Memory Queue

    import { connectQueue } from '@yoctol/message-queue';
    
    const queue = await connectQueue({ driver: 'memory', queueName: 'queueName' });

    RabbitMQ Queue

    import { connectQueue } from '@yoctol/message-queue';
    
    const queue = await connectQueue({
      driver: 'rabbitmq',
      queueName: 'queueName',
      amqpConfig: {
        url: 'amqp://localhost',
      },
      deadLetterConfig: {
        waitExchange: 'wait-exchange',
        maxRetryCount: 3,
        delayFactor: 1000,
        retryJitter: true,
      }
    });

    Enabling Dead Letter Handling in RabbitMQ Queue

    When given deadLetterConfig, the dead letter handling flow will be enabled. Enabling this feature will automatic retry dead letter messages(which throws errors during executing consume handler) with exponential back off with/without jitter.

    To enable dead letter handling, you can follow the settings:

    const queue = await connectQueue({
      driver: 'rabbitmq',
      amqpConfig: {
        url: 'amqp://localhost',
      },
      queueName: 'queueName',
      deadLetterConfig: {
        waitExchange: 'wait-exchange', // The exchange will be created with the name given
        maxRetryCount: 3, // If retry amount exceed the maxRetryCount, the reachMaxRetryHandler will be called
        delayFactor: 1000, // The final delay time (in milliseconds) is generate by this formula: delayFactor * delay base time (2^retryCount if retry jitter is disabled)
        retryJitter: true, // If retryJitter is enabled, the delay base time will be random integer from 1 to 2^retryCount
      }
    });
    
    // If retry amount exceed the maxRetryCount, the reachMaxRetryHandler will be called with (err, bufferMsg)
    queue.consume(handler, reachMaxRetryHandler)

    PubSub

    The pubsub has three driver: 'memory' and 'postgres', and 'rabbitmq'.

    Memory Pubsub

    import { connectPubsub } from '@yoctol/message-queue';
    
    const pubsub = await connectPubsub({ driver: 'memory' });

    Postgres Pubsub

    We use pg as client, see https://github.com/brianc/node-postgres for config info.

    import { connectPubsub } from '@yoctol/message-queue';
    
    // for more info, check https://github.com/brianc/node-postgres
    const config = {
      host: process.env.DATABASE_HOST,
      port: process.env.DATABASE_PORT,
      database: process.env.DATABASE_NAME,
      user: process.env.DATABASE_USER,
      password: process.env.DATABASE_PASSWORD,
    };
    const pubsub = await connectPubsub({
      driver: 'postgres',
      pgConfig: config,
    });

    RabbitMQ Pubsub

    import { connectPubsub } from '@yoctol/message-queue';
    
    const pubsub = await connectPubsub({
      driver: 'rabbitmq',
      amqpConfig: {
        url: 'amqp://localhost',
        exchange: 'amqp.exchange',
        connectOptions: {
          //node-amqp-connection-manager connect() options 
          heartbeatIntervalInSeconds: 5,
          ...
          connectionOptions: {
            //amqplib connection options
            ...
          },
        },
        createChannelOptions: {
          //node-amqp-connection-manager createChannel() options 
          name: 'channelName',
          setup: ...,
          json: true,
        },
     },
    });

    Install

    npm i @yoctol/message-queue

    DownloadsWeekly Downloads

    5

    Version

    0.1.2

    License

    MIT

    Unpacked Size

    31 kB

    Total Files

    28

    Last publish

    Collaborators

    • link515