0.0.5 • Published 6 months ago

hcorp-rabbitmq-test v0.0.5

Weekly downloads
-
License
MIT
Repository
-
Last release
6 months ago

Esta biblioteca RabbitMQ para Nestjs foi escrita para ajudar os programadores a terem mais controle sobre RabbitMQ ao usar Nestjs, sem exigir muito esforço para obtê-lo.

Como utilizar


  pnpm i @controlle.tecnologia/rabbitmq

Agora que temos a biblioteca em nosso projeto, basta importar o ControlleRabbitmqModule para o módulo principal da nossa aplicação como no exemplo abaixo.

ControlleRabbitmqModule.forRoot({
  urls: ['amqp://guest:guest@localhost:5672'],
  prefetch: {
    publishChannel: 1,
    rpcChannel: 1,
    subscribeChannel: 5,
  },
});
Apenas o parâmetro "urls" é necessário, mas você poderá configurar outras coisas neste módulo, como timeout e a configuração inicial dos canais.

Use Case


Queue decorator

No exemplo a seguir mostrarei como tratar uma nova mensagem da fila e registrar os dados recebidos.

  @Queue({ queue: 'controlle-rabbitmq-dev-q1'})
  async consumer(payload: any, message: ConsumeMessage) {
    console.log('message data', payload);
  }

Um método decorado com Queue decorator recebe dados de mensagens através do parâmetro payload. Você pode obter a mensagem inteira usando o segundo parâmetro que é opcional, este tipo de parâmetro vem de @types/ amqplib, então se você quiser usar este tipo em seu projeto você deve adicionar @types/amqplib em seu package.json


ControlleRabbitmqService

Como você já importou ControlleRabbitmqModule no appModule, agora você pode injetar a classe ControlleRabbitmqService em seus serviços usando DI nestjs como no exemplo abaixo

  constructor(private readonly amqpService: ControlleRabbitmqService) {}

Este objeto fornece a você um controle total sobre todos os canais que são publishChannel, subscribeChannel, rpcChannel, você pode acessá-los através do objeto channelManagerTool que é uma propriedade de ControlleRabbitmqService. Todos esses canais são do tipo ChannelWrapper, que é o mesmo tipo que vem de amqplib.


Sending a message

Se você já injetou seu ControlleRabbitmqService em seu serviço, você pode utilizá-lo para enviar uma mensagem acessando o publishChannel como no exemplo abaixo.

await this.amqpService.publishTool.sendToQueue({
  queue: 'controlle-rabbitmq-dev-q1',
  payload: { name: 'Hiran Junior', id: 1 },
});

Para enviar uma mensagem, você terá que passar um objeto que possui 2 propriedades: queue para referenciar qual fila a mensagem será entregue e payload que são seus dados.