Messagens com RabbitMQ! ✉️
![Messagens com RabbitMQ! ✉️](/assets/img/posts/queue.png)
Como criar um template de dotnet core para ser utilizado via linha de comando ou visual studio.
Muito tempo atrás, na minha faculdade, fiz uma apresentação, o tema era livre e poderia escolher uma tecnologia que estivesse em alta para falar sobre, na época a tecnologia escolhida foi sobre mensagerias, estava começando a estudar sobre arquitetura de micro-serviços e me deparei com esse incrível tema, recentemente o github começou a me alertar de algumas vulnerabilidades que surgiram no projeto (desenvolvido em NodeJS), então decidi aproveitar para atualizar e escrever um pouco sobre ele.
Mas antes de começar, gostaria de falar o porquê surgiram e qual a utilidade das mensagerias, em sistemas de distribuidos e de larga escala, um dos problemas que é preciso resolver é o de comunicação, antes de mensagerias já existiam tanto o http e o tcp, porém existe um problema que esses protocolos não resolvem, que é a garantia de entrega, você pode enviar dados a outro sistema, porém se você precisa garantir que a mensagem seja recebida você mesmo precisa desenvolver a lógica de retry, timeout, semaphore entre outras.
Além disso, caso você precise enviar para diversos servicos o mesmo evento ou caso utilize uma infraestrutura de kubernetes por exemplo que permita derrubar nós, subir novos e escalar fácilmente, saber para onde enviar essa mensagem pode se tornar algo muito complexo.
Para solução desses problemas é possível utilizar serviços de mensageria, com elas você pode customizar de acordo com o seu uso, e entre elas o RabbitMQ é bastante flexivél e de fácil configuração.
Primeiro vamos falar como subir uma instância do RabbitMQ local (em sua máquina), isso facilita muito no desenvolvimento pois será nosso laboratório para testes, e uma ferramenta que ajuda muito nisso é o docker, ha diversos tutoriais de instalação do docker, ele é totalmente compativel com Windows, Mac ou Linux 🐧. Após instalado é possível subir o RabbitMQ com PASMEM um uníco comando!
docker run --rm -it --hostname my-rabbit -p 15672:15672 -p 5672:5672 rabbitmq:3-management
Nele basicamente estamos falando que:
- Caso já exista um docker com Rabbit rodando, excluir e subir novamente,
- Define a versão e portas que precisam ser abertas
- ‘Attacha’ o terminal a essa instancia, para ver o status de criação e acompanhar em tempo real o que acontece.
Agora vem a parte interessante na minha opinião da apresentação, clonando o repositório: queue-exemples e rodando os seguintes comandos:
npm install
npm start
Vamos iniciar a aplicação na porta 8080, nela criei um html simples que servia para os outros alunos acessarem e avaliar a apresentação, mas até aí nada demais, certo? A diferença está que, o servidor que vai processar esse request a principio está desligado, então todas as avaliações dadas por outros alunos são enviadas mas até então não são entregues a nenhum lugar, após todos avaliarem, tudo que precisamos fazer é subir o servidor que esta dentro da pasta /app
do mesmo repositório executando o comando node queue-server.js
e sim, todo o servidor está escrito em um arquivo só, NodeJS pode ser muito impressionante…