Skip to 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.

License

Notifications You must be signed in to change notification settings

renaner123/spring_microservice_rabbitmq

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

License: MIT

Table of Content
  1. Table of Content
  2. Getting Started
  3. Usage
  4. Roadmap
  5. Contributing
  6. License
  7. Contact
  8. Useful commands

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.

Fonte: Michelli Brito

(back to top)

Built With

  • Spring Boot
  • Java
  • Maven
  • PostgreSQL
  • RabbitMQ
  • CloudAMQP
  • SMTP Gmail
  • Docker

(back to top)

Getting Started

Prerequisites

É 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 CloudAMQP
  • GMAIL_USERNAME=email que será utilizado para os envios de emails
  • GMAIL_SENHA_APP=senha de app google para autenticação do email

Installation

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

(back to top)

Usage

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.

(back to top)

Roadmap

  • 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

(back to top)

Contributing

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!

  1. Faça um Fork do Projeto
  2. Crie seu Branch de Funcionalidade (git checkout -b feature/AmazingFeature)
  3. Faça Commits nas suas Mudanças (git commit -m 'Add some AmazingFeature')
  4. Faça o Push para o Branch (git push origin feature/AmazingFeature)
  5. Abra uma Pull Request

(back to top)

License

Distribuído sob a Licença MIT. Consulte LICENSE para obter mais informações.

(back to top)

Contact

Renan Rodolfo - Linkedin - [email protected]

(back to top)

Useful commands

# 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

(back to top)

About

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.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published