Tecnologia

RabbitMQ: o que é e como utilizar

Avatar do Rogério Marques

Por Rogério Marques

29 março 2018 - 16:18 | Atualizado em 09 agosto 2023 - 14:49


rabbitmq-o-que-e-e-como-utilizar

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 e 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:

Ilustração rabbit queue_name

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

Publisher:

Ilustração rabbit mq

 

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

Consumer:

Ilustração rabbit mq

 

Como diz o próprio nome, é o agente responsável por consumir e 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 de RabbitMQ utilizarei 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:

1 using System;

using RabbitmQ.Client;

3

namespace Cedro

5 {

0 references

6 class Enviar

{

0  references

8 static void Main()

9 {

10 var factory = new ConnectionFactory() ( HostName = “localhost” ) };

11 using (var connection = factory.CreateConnection())

12 {

13         using (var channel = connection.CreateModel())

14         {

15

16                   }

17              }

18           }

19     }

20 }

21

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

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

1 using System;

2 using system.Text;

3 using RabbitMQ.Client;

4

5 namespace Cedro

6 {

0  references

7 class Enviar

8 {

9 static void Main ()

10 {

11       var factory  =  new ConnectionFactory() { HostName = ‘’localhost’’ };

12       using ( var connection = factory.CreateConnection())

13       {

14 using (var channel = connection.CreateModel))

15 {

16         channel.QueueDeclare(queue: ‘’CedroBlog’’,

17     durable: false,

18     exclusive: false,

19     autoDelete: false,

20     arguments: null);

21 

22   string message = ‘’Tutorial RabbitMQ!’’ ;

23    var body = Encoding.UTF8.Getbytes(message);

24 }

25         }

26     }

27         }

28 }

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:

0 references 

class Enviar

{

0 references

static void Main(  ) 

var factory = new ConnectionFactory( ) { HostName = “localhost” }; using (var connection =  factory.CreateConnection( ) ) 

using (var channel connection.CreateModel( ) ) 

{

channel.QueueDeclare (queue:  “CedroBlog“, 

durable: false

exclusive: false

autoDelete: false

arguments: null); 

string message = “Tutorial RabbitMQ!”; var body = Encoding.UTF8.GetBytes(message); 

channel.BasicPublish(exchange ‘’ ’’

routingKey: “CedroBlog”

basicProperties: null

body: body ); 

Console.WriteLine (“Mensagem Enviada!”); 

 }

 Console.ReadLine( );

}

}

}

}

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:

1 using RabbitMQ.Client;

2 using RabbitMQ.Client.Events;

3 using System;

4 using System.Text;

5

6 namespace Cedro

7 {

0 references

8 class Program

9 {

0 references

10 static void Main( )

11 {

12 var factory = new ConnectionFactory( ) { HostName = “localhost” }; using (var 

13 connection factory.CreateConnection( ) )

14 {

15 using (var channel connection. CreateModel( ) )

16 {

17 channel.QueueDeclare (queue: “CedroBlog”,

18 durable: false,

19 exclusive: false,

20 autoDelete: false,

21 arguments: null);

22

23 }

24 }

25 }

26 }

27 }

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

6 namespace Cedro

7 {

0 references

8 class Program

9 {

0 references

10 static void Main( )

11 {

12 var factory = new ConnectionFactory( ) { HostName = “localhost” }; using (var 

13 connection factory.CreateConnection( ) )

14 {

15 using (var channel = connection. CreateModel( ) )

16 {

17 channel.QueueDeclare (queue: “CedroBlog”,

18 durable: false,

19 exclusive: false,

20 autoDelete: false,

21 arguments: null);

22

23 var consumer = new EventingBasicConsumer (channel); consumer. 

24 Received += (model, ea) =>

25 {

26 var body ea.Body;

27 var message = Encoding.UTF8.GetString(body); 

28 Console.WriteLine(message);

29 };

30 channel.BasicConsume (queue: “CedroBlog”,

31 autoAck: true,

32 consumer: consumer);

33

34 Console.WriteLine(“Consumer Funcionando”);

35 Console.ReadLine( );

36 }

37 }

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

Resultado

Para ver os resultados, execute primeiramente o consumer e logo em seguida o publisher. O resultado deverá ser semelhante a este:

C:\User\Nathan\Desktop\RabbirMQCedro\Cedro>dotnet run

Mensagem Enviada!

C:\User\Nathan\Desktop\RabbirMQCedro\Cedro>dotnet run

Consumer Funcionando

Tutorial RabbitMQ!

Comentários:

Uma resposta para “RabbitMQ: o que é e como utilizar”

  1. Avatar do UBIRAJARA PIRES CASTRO MUNDURUCA UBIRAJARA PIRES CASTRO MUNDURUCA disse:

    Opa, bom artigo introdutório. Mas a linha 26 pra converter a msg de volta para string precisa ajsutar para: var body = ea.Body.ToArray();

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *