@controlle.tecnologia/rabbitmq
v0.0.7
Published
### Como utilizar
Downloads
102
Maintainers
Keywords
Readme
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.