Este projeto faz parte do meu PDI sugerido pelo meu Tech Lead Yuji Negoro. Consiste em criar uma aplicação que usa Java com Spring e aplicação dos conceitos de fila utilizando RabbitMQ.
Até o momento, foram criados 3 aplicações:
- um producer, que gera uma mensagem e encaminha pra uma fila do RabbitMQ;
- um consumer, que lê a mensagem da fila e grava em uma collection no MongoDB;
- um front end simples em REACT.
Para rodar esta aplicação você precisa ter o Java 11 instalado na sua máquina, o Docker (que irá rodar uma imagem do RabbitMQ) e o Yarn para rodar o frontend.
Primeiramente, você deve fazer o clone deste projeto.
# clonar repositório
git clone https://github.com/mayconb2/pdi-rabbitmq
Logo após, acessar o diretório do frontend e instalar todas as dependências, conforme os seguintes comandos:
# entrar na pasta do projeto frontend
cd frontend
# instalar dependências
yarn install
# executar o projeto
yarn start
Após o comando start, a aplicação frontend irá subir na porta 3000.
Para subir a imagem do RabbitMQ, na raiz do projeto, você rodar o docker-compose a partir do seguinte comando:
# subindo imagem docker do RabbitMQ
docker-compose up
Será feito o download de uma imagem do RabbitMQ (caso já não tenha locamente) e irá subir na porta 5762. A inteface web do RabbitMQ pode ser acessado através da url http://localhost:15672. Para realizar login, basta colocar "guest" tanto em username quanto password.
Após o frontend e o RabbitMQ estarem rodando localmente, já é possível abrir as duas aplicações feitas em Java com Spring, na sua IDE de preferência.
OBS: a aplicação pdi-consumer espera algumas variáveis de ambiente para poder se conectar no Mongo. Eu optei por utilizar o MongoDB Atlhas em um cluster privado. Para utilizar seu próprio Mongo você deve criar um arquivo env.properties na raiz do projeto pdi-consumer com as seguintes informações:
# variáveis de ambiente do MongoDB
MONGO_USER=<SEU_USUARIO_MONGO>
MONGO_PWD=<SUA_SENHA>
MONGO_DATABASE=<SEU_DATABASE>
Até o momento, a aplicação é muitosimples. Há apenas dois inputs de texto e um botão de enviar. As informações preenchidas (usuário e mensagem) são gravadas no MongoDB. Primeiro, o producer encaminha o payload para exchenge especificada no projeto. Esse, por sua vez, encaminha para fila correta. Após a mensagem estar na fila, a aplicação consumer lê o payload e grava no MongoDB.
Em breve, numa segunda fase do PDI, irei implementar um chat em tempo real para ler e exibir as mensagens gravadas no mongo. Possivelmente será utilizado WebSocket.