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.
Conclusão
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. 😉