.NET

10 mar, 2020

POC — Produtor e Consumidor com .NET Core + RabbitMQ

Publicidade

Introdução

No Artigo de hoje, vamos brincar com o RabbitMQ , criando uma POC (Prova de conceito) com 2 aplicativos de console .Net Core, publicando mensagens em uma fila do Rabbbit e consumindo essas mensagens.

Mão na Massa

O projeto que iremos utilizar hoje está no meu GitHub só acessar 😉

Para começar vamos com uma breve explicação, o RabbitMQ é um serviço de mensageiria Open Source, que trabalha com o protocolo AMQP, protocolo de enfileiramento de mensagens. Sendo possível publicar e consumir mensagens, ideal para realizar integrações entre sistemas diferentes.

Para utilizar o Rabbit é possível subir um container no Docker, segue o link do Docker Hub com a imagem do rabbitMq.

Já com o Rabbit no ar, vamos criar dois aplicativos de console. No primeiro, iremos publicar mensagens em uma fila e no segundo vamos consumir as mensagens dessa fila, simulando uma aplicação que precisa descentralizar as responsabilidade. Exemplo: uma API coleta informações e quem armazena ou processa essas informações é outra aplicação.

Vamos abrir o VS2019 e criar dois projetos Aplicativo de console (.Net Core).

1• RabbitMQ-Processor, ele será responsável por publicar as mensagens na fila do rabbit.

2• RabbitMQ-Consumer, ele será responsável por consumir as mensagens da fila do rabbit.

Primeiro vamos instalar o RabbitMQ.Client via Nuget nos dois projetos.

RabbitMQ-Processor: Agora na classe program vamos criar nosso código para publicar as mensagens na fila do rabbit. Note que quem sobe o que é o Rabbit e como publica é a classe RabbitMqClient.

RabbitMQ-Consumer: Agora na classe program vamos criar nosso código para ficar escutando e consumindo as mensagens que serão publicados pelo processor.

Agora vamos criar a classe RabbitMqClient,

Note que nessa classe tem os seguintes métodos:

º CreateConnection() — Responsável por criar conexão com o Rabbit.

º ConfigureQueue() — Responsável por configurar o nome da Fila onde serão publicadas as mensagens.

º Publish() — Responsável por publicar as mensagens na fila do RabbitMQ.

º Listen() — Responsável por ler as mensagens da fila do RabbitMQ. Caso a mensagem esteja vazia, não será executado o comando ACK, responsável por confirmar que a mensagem foi entregue, dessa forma a mensagem irá continuar na fila.

OBS: Essa classe será criada para os dois projetos.

Agora vamos executar o projeto RabbitMQ-Processor.

Note que publicamos 10000 mensagens na fila que configuramos e está esperando um consumidor.

Vamos executar o RabbitMQ-Consumer:

Note que agora essa fila tem um consumidor, que recebe essas mensagens e em nossa POC apenas escreve as informações no console.

Nessa prova de conceito conseguimos simular como duas aplicações diferentes conseguem trabalhar em conjunto. Note que o primeiro Console apenas pública as mensagens (essa é a única responsabilidade dele, receber dados e publicá-los na fila).

Já o segundo Console tem a única responsabilidade de consumir os dados de uma fila e realizar uma ação com os mesmos. Um não depende do outro; cada um tem sua responsabilidade deixando o sistema assíncrono por padrão.

Obs: É possível adicionar mais de um consumidor, caso tenhamos um número muito alto de mensagens na fila.

Essa foi apenas uma brincadeira de como podemos utilizar o RabbitMQ. Nos próximos artigos vamos criar um projeto utilizando .Net Core, RabbitMQ, SQL Server, MongoDB e ver a mágica acontecer. 😉