Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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: about 1 month ago
JSON representation

Projeto final do curso Especialista Backend Java - EBAC. Desmembramento de um monólito para uma arquitetura de microsserviços.

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)