@coincatex/rabbitmq

description

Usage no npm install needed!

<script type="module">
  import coincatexRabbitmq from 'https://cdn.skypack.dev/@coincatex/rabbitmq';
</script>

README

Nest JS rabbitMQ implementation

Licence CI

Easy to use RabbitMQ implementation for NestJS

Http like interface to work with AMQP protocol. Redelivery friendly. It is in production use at the CoinCat crypto exchange.

Setup

Install

$ npm i @coincatex/rabbitmq --save

Configure

Add microservice to your main.ts file

const amqp = await NestFactory.create(
    RabbitModule.forRoot({
      host: process.env.AMQP_QUEUE_HOST,
      port: parseInt(process.env.AMQP_QUEUE_PORT, 10),
      login: process.env.AMQP_QUEUE_LOGIN,
      password: process.env.AMQP_QUEUE_PASSWORD,
      tasksQueueNormal: process.env.AMQP_QUEUE_COMMAND_REQUEST,
      tasksQueueRedelivery: process.env.AMQP_QUEUE_REQUEST_ONCE_DELIVERY,
      deadLetterRoutingKey: process.env.AMQP_QUEUE_COMMAND_REQUEST_DEAD_LETTER,
      deadLetterRoutingKeyRedelivery:
        process.env.AMQP_QUEUE_COMMAND_REQUEST_ONCE_DELEVERY_DEAD_LETTER,
      exchange: process.env.AMQP_EXCHANGE_COMMAND,
      prefetch: parseInt(process.env.AMQP_QUEUE_PREFETCH, 10),
    }),
  );
  const transport = amqp.get<RabbitTransport>(RabbitTransport);
  app.connectMicroservice({
    strategy: transport,
    options: {},
  });

  app.startAllMicroservices();

Then use in any Controller. You can return any value, Promise or Observable. The result will be automatically sent to the result queue if success or to dead letter queue otherwise.

  @AMQP('say_hi')
  warmUp(@AMQPRequest requestId: string, @AMQPParam q: HiMessage): Observable<Result> {
    return this.hiService.greet(requestId, q);
  }

Contributing

If you'd like to add or fix stuff, feel free to file a pull request. The best way to submit feedback and report bugs is to open a GitHub issue.

Stay in touch