Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/maxjdev/desmembramento_de_monolito_para_microsservicos
Projeto final do curso Especialista Backend Java - EBAC. Desmembramento de um monólito para uma arquitetura de microsserviços.
https://github.com/maxjdev/desmembramento_de_monolito_para_microsservicos
actuator backend eureka gateway java-17 jpa microsservicos migracao monolito spring zipkin
Last synced: 7 days ago
JSON representation
Projeto final do curso Especialista Backend Java - EBAC. Desmembramento de um monólito para uma arquitetura de microsserviços.
- Host: GitHub
- URL: https://github.com/maxjdev/desmembramento_de_monolito_para_microsservicos
- Owner: maxjdev
- Created: 2024-07-28T13:04:02.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2024-07-28T19:20:32.000Z (4 months ago)
- Last Synced: 2024-07-28T20:34:45.269Z (4 months ago)
- Topics: actuator, backend, eureka, gateway, java-17, jpa, microsservicos, migracao, monolito, spring, zipkin
- Language: Java
- Homepage:
- Size: 583 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Desmembramento de monólito para microsserviços
### Diagrama arquitetural do projeto
![Diagrama arquitetural](img/ArquiteturaDeMicrosserviços.drawio.png)
## Descrição
O projeto consiste em migrar/desmembrar uma aplicação monolítica para uma arquitetura de microsserviços.
O foco é identificar e definir os domínios, desenhar a nova arquitetura, e implementar monitoramento, logs, métricas e tracing distribuído.
Além disso, será implementada a funcionalidade "meme do dia", que consiste em retornar um meme aleatório do banco de dados.
O projeto também envolve a separação dos bancos de dados e o desacoplamento das entidades de domínio, mantendo seus relacionamentos.
Registro de serviços e centralização de configurações são aspectos opcionais.## Tecnologias e dependências do projeto
- **Spring Boot:** Base para a criação de microsserviços
- **Spring Cloud:** Ferramentas e libs para sistemas distribuídos
- **Spring Actuator:** Monitoramento e métricas
- **Spring Web:** Criação de API RESTful
- **Spring Cloud Config Server:** Centralização das configurações dos microsserviços
- **Spring Cloud Netflix Eureka Server:** Registro e descoberta de serviços
- **Spring Devtools:** Ferramentas adicionais para desenvolvimento
- **Spring Data JPA:** Abstração para acesso a dados
- **SpringDoc OpenApi WebMvc UI:** Documentação de API e teste de endpoints com Swagger UI
- **Spring Cloud OpenFeign:** Comunicação síncrona entre microsserviços
- **Spring Validation:** Validação de dados
- **Spring Bootstrap:** Inicialização do bootstrap.yml antes do contexto da aplicação
- **Micrometer Tracing Bridge Brave:** Tracing distribuído
- **Zipkin Reporter Brave:** Envio de tracings para o Zipkin
- **Lombok:** Redução de boilerplate de código
- **H2:** Banco de dados em memória## Data Transfer Object (DTO)
O padrão dtos é para transferir dados entre partes de um sistema ou sistemas diferentes para reduzir trafego de dados e evitar expor informações sensíveis.
## Testar o projeto
- Com docker e docker-compose instalados navegue até o diretório do projeto, abra seu terminal e digite o seguinte comando
```bash
docker-compose up -d
```- Inicie os microsserviços, começando pelo Config-Server, depois o Service-Discovery e, em seguida, os demais na ordem desejada. Essa ordem é importante, pois os microsserviços precisam acessar o Config-Server para obter as configurações centralizadas e se registrar no Service-Discovery para descoberta e comunicação.
- Os endpoints podem ser testados via Postman ou via OpenAPI (Swagger), que já está configurado como dependência do projeto. Utilize a porta 8890, que é a porta do API Gateway. Caso deseje testar via Postman, seguem abaixo os objetos JSON das entidades:
**Usuario:** Nome + E-mail(Deve ser válido pois possui validação via Spring Validations)
```json
{
"nome": "Max Dev",
"email": "[email protected]"
}
```**Categoria:** Nome + Descrição + UsuarioID (ID de um usuario já cadastrado)
```json
{
"nome": "Programação",
"descricao": "Memes de programação",
"usuarioId": 1
}
```**Meme:** Nome + Descrição + Url + CategoriaID + UsuarioID (IDs de usuario e categoria já cadastrados)
```json
{
"nome": "Na minha maquina funciona",
"descricao": "Quando o dev diz = na minha maquina funciona",
"url": "https://developerslife.tech/pt/wp-content/uploads/2012/12/tirinha819.png",
"idCategoriaMeme": 1,
"idUsuario": 1
}
```
## Prints de testes
- Exemplo de um Post Request no MS-Meme
![Post Request de um meme](img/MemePost.png)- Exemplo de um Get Request no MS-Meme
![Get Request de um meme](img/MemeGet.png)- Exemplo de um Get Request para o meme do dia no MS-Meme
![Get Request do meme do dia](img/MemeGetMemeDoDia.png)