# loopback-rabbitmq

> loopback-rabbitmq

Latest version **1.1.6-0** (published 2021-08-26) · 0 weekly downloads

## Install

```sh
npm install loopback-rabbitmq
pnpm add loopback-rabbitmq
yarn add loopback-rabbitmq
bun add loopback-rabbitmq
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.1.6-0 |
| Published | 2021-08-26 |
| First published | 2020-06-16 |
| Weekly downloads | 0 |
| TypeScript types | bundled |
| Module format | CommonJS |
| Node | >=10 |
| Dependencies | 3 |
| Unpacked size | 110.4 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 9 |
| Author | Alex Pereira \| Getconnect |
| Maintainers | alexnfsc175, hgbtech |
| Keywords | loopback-extension, loopback |

## Links

- npm: https://www.npmjs.com/package/loopback-rabbitmq
- Repository: https://github.com/alexnfsc175/loopback-rabbitmq
- Homepage: https://github.com/alexnfsc175/loopback-rabbitmq#readme
- Issues: https://github.com/alexnfsc175/loopback-rabbitmq/issues
- npm.io page: https://npm.io/package/loopback-rabbitmq

## Dependencies (3)

- [tslib](https://npm.io/package/tslib.md) ^2.0.0
- [amqplib](https://npm.io/package/amqplib.md) ^0.8.0
- [@loopback/boot](https://npm.io/package/@loopback/boot.md) ^3.4.0

## Recent versions

- 1.1.6-0 (latest) — 2021-08-26
- 1.1.5 — 2021-05-26
- 1.1.4 — 2021-03-09
- 1.1.3 — 2021-02-25
- 1.1.2 — 2021-02-25
- 1.1.1 — 2021-02-25
- 1.1.0 — 2021-01-14
- 1.0.9 — 2020-12-07
- 1.0.8 — 2020-10-26
- 1.0.7 — 2020-08-31
- 1.0.6 — 2020-08-05
- 1.0.5 — 2020-06-25
- 1.0.4 — 2020-06-23
- 1.0.3 — 2020-06-22
- 1.0.2 — 2020-06-16
- … 2 more at https://npm.io/package/loopback-rabbitmq/versions

## README

# loopback-rabbitmq

An Rabbitmq extension for LoopBack 4.

```npm
npm i -s loopback-rabbitmq
```

## Usage

When the `loopback-rabbitmq` package is installed, bind it to your application with `app.component()`

```typescript
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

| RabbitmqBindings  | Binding Value     |
| ----------------- | :---------------- |
| RABBITMQ_PRODUCER | RabbitmqProducer  |
| RABBITMQ_CONSUMER | RabbitmqConsumer  |
| COMPONENT         | RabbitmqComponent |

```typescript
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

```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](<https://github.com/strongloop/loopback-next/raw/master/docs/site/imgs/branding/Powered-by-LoopBack-Badge-(blue)-@2x.png>)](http://loopback.io/)

<http://nelsonsar.github.io/2013/10/29/AMQP-building-blocks.html>

---
_Source: https://npm.io/package/loopback-rabbitmq · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
