1.1.6-0 • Published 3 years ago

loopback-rabbitmq v1.1.6-0

Weekly downloads
211
License
-
Repository
github
Last release
3 years ago

loopback-rabbitmq

An Rabbitmq extension for LoopBack 4.

npm i -s loopback-rabbitmq

Usage

When the loopback-rabbitmq package is installed, bind it to your application with app.component()

import {RestApplication} from '@loopback/rest';
import {
  ConsumersBooter,
  MessageHandlerErrorBehavior,
  QueueComponent,
  RabbitmqBindings,
  RabbitmqComponent,
  RabbitmqComponentConfig,
} from 'loopback-rabbitmq';

const app = new RestApplication();
app.configure<RabbitmqComponentConfig>(RabbitmqBindings.COMPONENT).to({
  options: {
    protocol: process.env.RABBITMQ_PROTOCOL ?? 'amqp',
    hostname: process.env.RABBITMQ_HOST ?? 'localhost',
    port:
      process.env.RABBITMQ_PORT === undefined
        ? 5672
        : +process.env.RABBITMQ_PORT,
    username: process.env.RABBITMQ_USER ?? 'rabbitmq',
    password: process.env.RABBITMQ_PASS ?? 'rabbitmq',
    vhost: process.env.RABBITMQ_VHOST ?? '/',
  },
  // configurations below are optional, (Default values)
  producer: {
    idleTimeoutMillis: 10000,
  },
  consumer: {
    retries: 0, // number of retries, 0 is forever
    interval: 1500, // retry interval in ms
  },
  defaultConsumerErrorBehavior: MessageHandlerErrorBehavior.ACK,
  prefetchCount: 10,
  exchanges: [
    {
      name: 'loopback.direct',
      type: 'direct', // Uma troca direta entrega mensagens às filas com base na chave de roteamento de mensagens.
      // type: 'fanout' // Uma exchange de fanout roteia mensagens para todas as filas que estão vinculadas
    },
    {
      name: 'messaging.direct',
      type: 'direct',
    },
  ],
});
app.component(RabbitmqComponent);
/**
 *  Bind classes to listen Events
 */
app.booters(ConsumersBooter);
app.component(QueueComponent);

// Customize @loopback/boot Booter Conventions here
app.bootOptions = {
  consumers: {
    dirs: ['consumers'],
    extensions: ['.consumer.js'],
    nested: true,
  },
  controllers: {
    // Customize ControllerBooter Conventions here
    dirs: ['controllers'],
    extensions: ['.controller.js'],
    nested: true,
  },
};

Bindings

RabbitmqBindingsBinding Value
RABBITMQ_PRODUCERRabbitmqProducer
RABBITMQ_CONSUMERRabbitmqConsumer
COMPONENTRabbitmqComponent
import {
  RabbitmqBindings,
  RabbitmqProducer,
} from 'loopback-rabbitmq';

export class RabbitController {
  constructor(
    @inject(RabbitmqBindings.RABBITMQ_PRODUCER)
    private rabbitmqProducer: RabbitmqProducer
  ) {}

  ...

  @get('/test', {
    responses: {
      '200': TEST_RESPONSE,
    },
  })
  async test(
    @param.query.string('exchange', {required: false}) exchange?: string,
    @param.query.string('routingKey', {required: false}) routingKey?: string,
  ) {

    await this.rabbitmqProducer.publish(
      exchange ?? 'messaging.direct',
      routingKey ?? 'tenant.webhook',
      Buffer.from(JSON.stringify({name: 'loopback-rabbitmq-example', date: new Date()})),
    );

    // Reply with a greeting, the current time, the url, and request headers
    return {
      greeting: 'Hello from LoopBack',
      date: new Date(),
      url: this.req.url,
      headers: Object.assign({}, this.req.headers),
    };
  }

}

Create a dir in src/consumers with webhooks-consumer.consumer.ts

import {ConsumeMessage, rabbitConsume} from 'loopback-rabbitmq';

interface Message {
  action: string;
  tenantId?: number;
  payload: any;
}

export class WebhooksConsumer {
  constructor() // public WebhookRepository: WebhookRepository, // @repository(WebhookRepository)
  // @service(WebhookProvider) public webhookService: WebhookService,
  {}

  @rabbitConsume({
    exchange: 'messaging.direct',
    routingKey: 'tenant.webhook',
    queue: 'webhooks',
  })
  async handle(message: Message, rawMessage: ConsumeMessage) {
    console.log('WebhooksConsumer: ', message);
    console.log('WebhooksConsumer:raw: ', rawMessage);
  }
}

LoopBack

http://nelsonsar.github.io/2013/10/29/AMQP-building-blocks.html

1.1.6-0

3 years ago

1.1.5

3 years ago

1.1.4

3 years ago

1.1.1

3 years ago

1.1.3

3 years ago

1.1.2

3 years ago

1.1.0

3 years ago

1.0.9

3 years ago

1.0.8

4 years ago

1.0.7

4 years ago

1.0.6

4 years ago

1.0.5

4 years ago

1.0.4

4 years ago

1.0.3

4 years ago

1.0.2

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago