home Sem categoria RabbitMQ: o que é e como utilizar

RabbitMQ: o que é e como utilizar

O que é RabbitMQ:

RabbitMQ é um servidor de mensageria de código aberto (open source) desenvolvido em Erlang, implementado para suportar mensagens em um protocolo denominado Advanced Message Queuing Protocol (AMQP). Ele possibilita lidar com o tráfego de mensagens de forma rápida e confiável, além de ser compatível com diversas linguagens de programação, possuir interface de administração nativa e ser multiplataforma.

Dentre as aplicabilidades do RabbitMQ estão possibilitar a garantia de assincronicidade entre aplicações, diminuir o acoplamento entre aplicações, distribuir alertas, controlar fila de trabalhos em background.

Este artigo tem como objetivo demonstrar um simples exemplo de como utilizar o RabbitMQ.

Conceitos

Mensagem:

Uma mensagem é dividida em duas partes:

  • Payload – é o corpo com os dados que serão transmitidos. Suporta vários tipos de dados como um array json até um filme mpeg.
  • Label – é responsável pela descrição do payload e também como o RabbitMQ saberá quem irá receber a mensagem.

Fila:

Onde as mensagens ficam e são retiradas pelos consumers.

Publisher:

É o responsável por incluir cada nova mensagem na fila, ou seja enviar a mensagem.

Consumer:

Como diz o próprio nome é o agente responsável por consumir, retirar, a informação da fila.

Criando Publisher

Para começarmos, precisamos do RabbitMQ, que pode ser adquirido gratuitamente através do site oficial: https://www.rabbitmq.com/download.html, lembrando que também é possível utilizar com Docker.

Neste Tutorial estarei utilizando Asp.Net Core 2.0. Você também pode usar o .NET Framework, no entanto as etapas de configuração serão diferentes.

1 – Primeiramente crie um console application para o publisher e adicione o pacote nuget do RabbitMQ depois restaure o projeto.

  • dotnet add package RabbitMQ.Client
  • dotnet restore

2 – Depois iremos montar a conexão com o seguinte código:

Aqui nos conectamos a uma máquina local, daí o localhost. Se quisermos nos conectar uma máquina diferente, simplesmente especificaremos seu nome ou endereço IP.

3 – Agora iremos declarar a fila e criar a mensagem:

A fila só será criada se já não existir. O conteúdo da mensagem é uma matriz de bytes, para que você possa codificar o que quiser.

4 – Aqui iremos adicionar o método para publicar a mensagem:

E está pronto nosso publisher: ele irá enviar para a fila CedroBlog a mensagem que está no body.

Criando Consumer

1 – Para o consumer, iremos criar outro console application, criar a conexão e declarar fila da mesma maneira que no publisher:

2 – Agora adicionamos a parte do consumidor, que irá pegar as mensagens da fila:

Usamos um console ReadLine, para manter a aplicação rodando. Nosso consumer vai estar pegando toda mensagem que chega na fila CedroBlog e nos mostrando o que ela contém.

Resultado

Para ver os resultado,s execute primeiramente o consumer e logo em seguida o publisher. O resultado deverá ser o seguinte:

Fonte: arquivo pessoal

Dúvidas? Fale com a gente através do espaço de comentários logo abaixo.

Gostou? Compartilhe:

Nathan de Sousa Martins

Nathan de Sousa Martins

Graduando em sistemas de informação e estagiário na Cedro entusiasta de novas tecnologias.

  • André RB

    Legal o artigo Nathan, mas eu senti falta de uma história contando o tipo de problema que consigo resolver com essa tecnologia. Sou leigo no assunto e cheguei nessa matéria através de um link que me enviaram.

    • Tiago Aguiar Moreira

      André, posso te dar um exemplo prático com o qual podemos resolver usando RabbitMQ.

      > Geração de relatórios

      Imagine que existe um site, e nele é possível tirar relatórios. Porém o período de extração do relatório pode ser muito grande. Vamos supor que o cliente queira tirar um relatório de 10 anos. Isso seria um problema, porque enquanto esse relatório não terminar, a tela do cliente ficará travada aguardando o término. Ele não poderá fazer nenhuma outra operação.
      Pensando nisso foi adotada uma estratégia com RabbitMQ. Criamos uma fila para impressão no RabbitMQ, onde receberá mensagens contendo as informações necessárias para gerar o relatório. Um outra aplicação estará consumindo as mensagens da fila e processando uma a uma. Ao término da geração, o arquivo do relatório (em pdf, excel, etc) será enviado por e-mail.
      Esse comportamento é igual ao da fila de impressão do windows.

      Espero que eu tenha ajudado. Se tiver alguma dúvida, comente. Abs.

      • André RB

        Obrigado pela resposta, mas sua aplicação seria apenas gerenciar filas de mensagens? Eu gostei do exemplo pois temos problemas aqui justamente com geração relatórios.

        • Tiago Aguiar Moreira

          Sim, basicamente gerenciar filas de mensagens. Acho que relatório é o pesadelo de todo sistema rs. A documentação do Rabbit é robusta. Tem exemplos em várias linguagens de programação, mas está em inglês. Eu uso o básico, mas atualmente estou me aprofundando. Desde instalar o serviço no servidor até usá-lo. Se eu puder te ajudar em algo mais, é só falar.