Table of Content
Este repositório contém um exemplo simples de uma arquitetura de microserviços e os passos necessários para realizar uma comunicação assíncrona entre dois microserviços utilizando mensageria e RabbitMQ. O cenário do projeto é o seguinte:
- O microserviço User produzirá mensagens que serão enviadas para o Broker (RabbitMQ), onde o Exchange receberá a mensagem e realizará a análise da mensagem recebida; em seguida, roteia para a respectiva Queue (default). Por fim, o microserviço de e-mail, que está conectado a essa fila, consumirá as mensagens à medida que chegam. O CloudAMQP será responsável por monitorar o RabbitMQ (Broker) na nuvem (Exchange e Queue). Além disso, adicionei algus serviços em containers Docker.
É necessário configurar as variavéis de ambiente, descritas abaixo, no sistema. A Queue do Cloud AMQP deve possuir o nome default.email
. Caso queira usar uma fila com nome diferente, pode-se alterar diretamente no arquivo application.properties.
AMQPS_CLOUD
=url da instância do RabbitMQ na CloudAMQPGMAIL_USERNAME
=email que será utilizado para os envios de emailsGMAIL_SENHA_APP
=senha de app google para autenticação do email
Para preparar o ambiente para execução dos microserviços é necessário inicializar um banco de dados PostgreSQL para o microserviço User
e um para o microserviço Email
. Para fazer isso, é necessário executar o docker compose conforme exemplo abaixo. Além dos bancos de dados, também será instanciado o microserviço User
.
docker compose up
Para garantir que o microserviço de e-mail realizará o consumo das mensagens da fila do RabbitMQ, é necessário executar o microserviço fora dos containeres Docker, para isso, é necessário os seguintes passos:
cd email
mvn clean install -DSkipTests
java -jar target/email-0.0.1-SNAPSHOT.jar
Com o ambiente preparado, para testar os microserviços, é necessário utilizar alguma plataforma de API e enviar um POST
para a rota address_container:8081/users
contendo o seguinte corpo:
{
"name": "Renan",
"email": "[email protected]"
}
Como resposta, é esperado o seguinte corpo:
{
"userId": "13ff124c-792b-491b-a231-c5aa78b103a6",
"name": "Renan",
"email": "[email protected]"
}
Se tudo ocorreu bem, o e-mail já deve ter recebido uma mensagem de boas vindas. A mensagem pode ser alterada aqui
Também é possível verificar no gerenciador do Cloud AMQP, em Quueues and Streams
, se a mensagem chegou na fila e se foi despachada, conforme imagem abaixo.
- Fazer validações dos e-emails
- Fazer microserviço Email funcionar no ambiente docker
- Implementar novos métodos
- Criar testes unitários
- Escalar os microserviços
- Testar outros Exchanges
Se você tiver uma sugestão que tornaria isso melhor, por favor, faça um fork do repositório e crie uma pull request. Você também pode simplesmente abrir um problema com a tag "melhoria". Obrigado!
- Faça um Fork do Projeto
- Crie seu Branch de Funcionalidade (
git checkout -b feature/AmazingFeature
) - Faça Commits nas suas Mudanças (
git commit -m 'Add some AmazingFeature'
) - Faça o Push para o Branch (
git push origin feature/AmazingFeature
) - Abra uma Pull Request
Distribuído sob a Licença MIT. Consulte LICENSE
para obter mais informações.
Renan Rodolfo - Linkedin - [email protected]
# Verificar log de um container chamado ms-user-pg
docker logs ms-user-pg
Acessar um container postgresql
docker exec -it ms-user-pg psql -U postgres
Iniciar um container postgresql
docker run -p 5432:5432 --name ms-user-pg --network ms-rabbit -e POSTGRES_PASSWORD=123456 -e POSTGRES_DB=db_user postgres:12-alpine
Executar um projeto maven da pasta user utilizando Dockerfile
mvn clean install -DskipTests
cd user
docker build -t ms-user:v1 .
docker run -p 8081:8081 --network ms-rabbit ms-user:v1