Skip to content

sonnesen/task-manager

Repository files navigation

Task Manager - Sistema de Microserviços

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.

🏗️ Arquitetura do Sistema

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

📦 Serviços

1. Config Service (Porta 8888)

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.)

2. Discovery Service (Eureka Server)

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

3. Gateway Service

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

4. User Service

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

5. Task Service

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

6. Notification Service

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

🛠️ Tecnologias Utilizadas

  • 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)

📋 Pré-requisitos

  • Java 17 ou superior
  • Maven 3.6+
  • PostgreSQL 12+
  • RabbitMQ 3.8+
  • Docker e Docker Compose (opcional)

🚀 Como Executar

Opção 1: Execução Local

  1. Clone o repositório:
git clone <repository-url>
cd task-manager
  1. Configure o banco de dados PostgreSQL:
CREATE DATABASE taskdb;
CREATE DATABASE userdb;
  1. Configure o RabbitMQ:
  1. 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

Opção 2: Build e Execução com JAR

# 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

🔍 Monitoramento e Endpoints

Service Discovery (Eureka)

Config Service

Gateway Service

APIs de Negócio

Documentação da API

📧 Configuração de Email

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: true

🔧 Configuração do Banco de Dados

Configurações de banco para cada serviço:

User Service:

spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/userdb
    username: postgres
    password: password

Task Service:

spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/taskdb
    username: postgres
    password: password

🛠️ Desenvolvimento

Estrutura do Projeto

task-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

Padrões de Desenvolvimento

  • 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

🐛 Troubleshooting

Problemas Comuns

  1. Serviços não se registram no Eureka:

    • Verifique se o Discovery Service está rodando
    • Confirme as configurações de rede
  2. Erro de conexão com banco:

    • Verifique se o PostgreSQL está rodando
    • Confirme as credenciais de acesso
  3. Falha na comunicação entre serviços:

    • Aguarde todos os serviços estarem registrados no Eureka
    • Verifique os logs de cada serviço
  4. Notificações não estão sendo enviadas:

    • Verifique se o RabbitMQ está rodando
    • Confirme as configurações de email

Logs e Debugging

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

📝 Próximos Passos

  • 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

🤝 Contribuição

  1. Fork o projeto
  2. Crie uma branch para sua feature (git checkout -b feature/nova-feature)
  3. Commit suas mudanças (git commit -am 'Adiciona nova feature')
  4. Push para a branch (git push origin feature/nova-feature)
  5. Abra um Pull Request

📄 Licença

Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published