https://github.com/matheusvidal21/ead-microservices
Repositório com a implementação de uma arquitetura de microservices em Java e Spring, simulando uma plataforma EAD. Inclui API Gateway, Service Registry, Config Server, comunicação síncrona e assíncrona, autenticação JWT, Circuit Breaker e boas práticas para sistemas distribuídos escaláveis e robustos.
https://github.com/matheusvidal21/ead-microservices
java microservices spring
Last synced: about 1 month ago
JSON representation
Repositório com a implementação de uma arquitetura de microservices em Java e Spring, simulando uma plataforma EAD. Inclui API Gateway, Service Registry, Config Server, comunicação síncrona e assíncrona, autenticação JWT, Circuit Breaker e boas práticas para sistemas distribuídos escaláveis e robustos.
- Host: GitHub
- URL: https://github.com/matheusvidal21/ead-microservices
- Owner: matheusvidal21
- Created: 2024-09-11T15:43:31.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-12-23T16:24:35.000Z (over 1 year ago)
- Last Synced: 2025-10-25T05:03:25.806Z (8 months ago)
- Topics: java, microservices, spring
- Language: Java
- Homepage:
- Size: 205 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
[](https://github.com/matheusvidal21/ead-microservices)
🚀 EAD Microservices
Bem-vindo ao repositório do **EAD Microservices**! Este projeto foi desenvolvido como parte de uma formação em microservices com Java e Spring e tem como objetivo demonstrar uma arquitetura robusta e escalável utilizando padrões e ferramentas modernas.
Para isso, foi construído um projeto que simula uma plataforma de cursos EAD (Educação a Distância), onde instrutores podem criar cursos e módulos, e alunos podem se cadastrar e se inscrever nos cursos disponíveis.
---
## 🏗️ Arquitetura de Microservices
Este projeto segue uma arquitetura de microservices, dividindo a aplicação em vários serviços independentes que se comunicam entre si. Cada microservice é responsável por uma funcionalidade específica e pode ser escalado e implantado separadamente.
### **Microservices Principais**
1. **AuthUser 🔐**:
- Gerencia a autenticação e autorização de usuários.
- Implementa **Spring Security** com suporte para JWT.
2. **Course 📚**:
- Responsável por gerenciar cursos, módulos, lições e inscrições.
3. **Notification 📣**:
- Lida com notificações e alertas para os usuários.
---
## 🛠️ Tecnologias Utilizadas
### **Linguagem e Frameworks**
- **Java 17** ☕
- **Spring Boot 3.1.0** 🌱:
- Spring Web (APIs RESTful)
- Spring Data JPA (Banco de dados)
- Spring Security (Autenticação/Autorização)
- Spring Cloud (Padrões de microsserviços)
### **Banco de Dados**
- **PostgreSQL** 🗃️
- Docker para provisionamento do banco de dados.
### **Mensageria**
- **RabbitMQ** 🐇:
- Comunicação assíncrona entre microservices.
### **Outras Ferramentas**
- **Spring Cloud Netflix Eureka** 📡: Service Registry.
- **Spring Cloud Config Server** 📜: Gerenciamento centralizado de configurações para todos os microservices.
- **Resilience4j** 🔄: Implementação de Circuit Breaker e Retry.
- **Orika Mapper** 🗺️: Ferramenta de mapeamento de objetos Java para conversões rápidas e eficientes entre DTOs e entidades.
- **Lombok** ✂️: Redução de verbosidade no código.
---
## 📂 Estrutura do Repositório
- **`api-gateway`**: Microservice que atua como o ponto único de entrada da aplicação, roteando requisições para os serviços internos.
- **`config-server`**: Fornece gerenciamento centralizado de configurações.
**`service-registry`**: Registro de serviços com Eureka.
- **`authuser`**: Gerencia autenticação, autorização e usuários.
- **`course`**: Serviço responsável por cursos, módulos e lições.
- **`notification`**: Serviço que gerencia as notificações.
- **`notification-hex`**: Serviço de notificações com arquitetura hexagonal.
- **`docker-compose.yml`**: Provisiona banco de dados necessários para cada serviço.
- **`init-db.sh`**: Script para inicializar o banco de dados.
---
## 🚦 Funcionalidades Implementadas
### **Comunicação e Padrões**
#### **API Gateway Pattern**
- Utilizado para roteamento centralizado de requisições.
- Implementado com Spring Cloud Gateway e Service Registry.
#### **Service Registry Pattern**
- Gerenciado com Eureka Server.
- Permite a descoberta dinâmica de serviços.
#### **Config Server**
- Gerenciamento centralizado de configurações em um repositório git.
- Atualização em tempo de execução com Spring Cloud Config.
#### **API Composition Pattern**
- Comunicação síncrona entre microservices para compor dados de múltiplos serviços.
### **Comunicação Síncrona**
- Inscrição de usuários em cursos.
- Deleção de dados com integração entre microservices.
### **Comunicação Assíncrona**
- **Mensageria com RabbitMQ**:
- Eventos de notificação entre serviços.
- **Event-Carried State Transfer**:
- Transferência de estado por meio de eventos.
### **Confiabilidade**
- Implementação do **Circuit Breaker Pattern** com Resilience4j para melhorar a resiliência de falhas.
### **Autenticação e Autorização**
- **JWT (Json Web Token)**:
- Autorização baseada em papéis (Roles).
- Integração de autenticação entre microservices.
---
## ⚙️ Configuração e Execução
### **Requisitos**
- JDK 17
- Maven
- Docker
### **Instalação**
1. Clone o repositório:
```bash
git clone git@github.com:matheusvidal21/ead-microservices.git
cd ead-microservices
```
2. Inicie containers para criar os bancos de dados:
```bash
docker-compose up -d
```
3. Inicie os microsserviços principais:
- service-registry
- config-server
- api-gateway
4. Inicie os demais microsserviços:
- auth-user
- courses
- notification
# 👥 Autor
| [
Matheus Vidal](https://github.com/matheusvidal21) |
| :---: |