Este projeto implementa um sistema de gerenciamento de tarefas usando arquitetura de microserviços com Spring Boot e Spring Cloud. O sistema é composto por seis serviços principais que trabalham em conjunto para fornecer uma solução completa de gerenciamento de tarefas com notificações.
O sistema utiliza os seguintes padrões de microserviços:
- Service Discovery com Eureka
- Centralized Configuration com Spring Cloud Config
- API Gateway para roteamento e segurança
- Message Broker com RabbitMQ para comunicação assíncrona
- Database per Service com PostgreSQL
Tecnologias: Spring Cloud Config Server
- Servidor de configuração centralizada
- Gerencia configurações de todos os microserviços
- Suporte a perfis de ambiente (dev, prod, etc.)
Tecnologias: Netflix Eureka Server
- Service Registry e Discovery
- Permite que os serviços se registrem e descubram outros serviços
- Balanceamento de carga automático
Tecnologias: Spring Cloud Gateway (WebFlux)
- API Gateway reativo
- Ponto de entrada único para todas as requisições
- Roteamento baseado em predicados
- Integração com Eureka para descoberta de serviços
Tecnologias: Spring Boot, JPA, PostgreSQL, Swagger/OpenAPI
- Gerenciamento de usuários
- APIs REST para operações CRUD de usuários
- Documentação automática com Swagger
- Persistência com PostgreSQL
Tecnologias: Spring Boot, JPA, PostgreSQL, RabbitMQ, OpenFeign, Swagger/OpenAPI
- Gerenciamento de tarefas
- APIs REST para operações CRUD de tarefas
- Comunicação com User Service via OpenFeign
- Publicação de eventos via RabbitMQ
- Documentação automática com Swagger
Tecnologias: Spring Boot, RabbitMQ, Spring Mail, Thymeleaf
- Serviço de notificações por email
- Consumo de eventos de tarefas via RabbitMQ
- Templates de email com Thymeleaf
- Envio de notificações assíncronas
- Java 17
- Spring Boot 3.5.3+
- Spring Cloud 2025.0.0
- Maven (build)
- PostgreSQL (banco de dados)
- RabbitMQ (message broker)
- Docker (containerização)
- Swagger/OpenAPI (documentação API)
- Java 17 ou superior
- Maven 3.6+
- PostgreSQL 12+
- RabbitMQ 3.8+
- Docker e Docker Compose (opcional)
- Clone o repositório:
git clone <repository-url>
cd task-manager- Configure o banco de dados PostgreSQL:
CREATE DATABASE taskdb;
CREATE DATABASE userdb;- Configure o RabbitMQ:
- Instale e inicie o RabbitMQ
- Acesse http://localhost:15672 (guest/guest)
- Execute os serviços na seguinte ordem:
# 1. Config Service (deve ser o primeiro)
cd config-service
./mvnw spring-boot:run
# 2. Discovery Service (aguarde o Config Service estar online)
cd ../discovery-service
./mvnw spring-boot:run
# 3. Gateway Service (aguarde o Discovery Service estar online)
cd ../gateway-service
./mvnw spring-boot:run
# 4. User Service
cd ../user-service
./mvnw spring-boot:run
# 5. Task Service
cd ../task-service
./mvnw spring-boot:run
# 6. Notification Service
cd ../notification-service
./mvnw spring-boot:run# Build de todos os serviços
mvn clean package -f config-service/pom.xml
mvn clean package -f discovery-service/pom.xml
mvn clean package -f gateway-service/pom.xml
mvn clean package -f user-service/pom.xml
mvn clean package -f task-service/pom.xml
mvn clean package -f notification-service/pom.xml
# Execução dos JARs
java -jar config-service/target/config-service-0.0.1-SNAPSHOT.jar
java -jar discovery-service/target/discovery-service-0.0.1-SNAPSHOT.jar
java -jar gateway-service/target/gateway-service-0.0.1-SNAPSHOT.jar
java -jar user-service/target/user-service-0.0.1-SNAPSHOT.jar
java -jar task-service/target/task-service-0.0.1-SNAPSHOT.jar
java -jar notification-service/target/notification-service-0.0.1-SNAPSHOT.jar- URL: http://localhost:8761
- Descrição: Dashboard do Eureka para visualizar serviços registrados
- URL: http://localhost:8888
- Health Check: http://localhost:8888/actuator/health
- URL: http://localhost:8080 (porta padrão do gateway)
- Health Check: http://localhost:8080/actuator/health
- User Service: http://localhost:8080/users (via gateway)
- Task Service: http://localhost:8080/tasks (via gateway)
- User Service Swagger: http://localhost:[porta]/swagger-ui.html
- Task Service Swagger: http://localhost:[porta]/swagger-ui.html
Para o serviço de notificações funcionar corretamente, configure as propriedades de email no application.yml do notification-service:
spring:
mail:
host: smtp.gmail.com
port: 587
username: [email protected]
password: sua-senha-app
properties:
mail:
smtp:
auth: true
starttls:
enable: trueConfigurações de banco para cada serviço:
User Service:
spring:
datasource:
url: jdbc:postgresql://localhost:5432/userdb
username: postgres
password: passwordTask Service:
spring:
datasource:
url: jdbc:postgresql://localhost:5432/taskdb
username: postgres
password: passwordtask-manager/
├── config-service/ # Servidor de configuração
├── discovery-service/ # Eureka Server
├── gateway-service/ # API Gateway
├── user-service/ # Serviço de usuários
├── task-service/ # Serviço de tarefas
├── notification-service/ # Serviço de notificações
└── README.md
- API First: APIs definidas com OpenAPI/Swagger
- Configuration as Code: Configurações centralizadas
- Health Checks: Endpoints de saúde em todos os serviços
- Distributed Tracing: Preparado para observabilidade
-
Serviços não se registram no Eureka:
- Verifique se o Discovery Service está rodando
- Confirme as configurações de rede
-
Erro de conexão com banco:
- Verifique se o PostgreSQL está rodando
- Confirme as credenciais de acesso
-
Falha na comunicação entre serviços:
- Aguarde todos os serviços estarem registrados no Eureka
- Verifique os logs de cada serviço
-
Notificações não estão sendo enviadas:
- Verifique se o RabbitMQ está rodando
- Confirme as configurações de email
Cada serviço possui endpoints do Actuator para monitoramento:
/actuator/health- Status de saúde/actuator/info- Informações da aplicação/actuator/metrics- Métricas da aplicação
- Implementar autenticação e autorização
- Adicionar distributed tracing (Sleuth/Zipkin)
- Implementar circuit breakers (Resilience4j)
- Adicionar testes de integração
- Configurar pipeline CI/CD
- Implementar caching distribuído
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/nova-feature) - Commit suas mudanças (
git commit -am 'Adiciona nova feature') - Push para a branch (
git push origin feature/nova-feature) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.