Skip to content

Arquitetura de microsserviços utilizando o ecossistema Spring Cloud. O projeto é composto por três serviços principais que são orquestrados e containerizados com Dockerfile e Docker Compose.

Notifications You must be signed in to change notification settings

ddouglss/microservice-spring-cloud

Repository files navigation

Projeto de Microsserviços com Spring Cloud e Docker

Este é um projeto de demonstração que implementa uma arquitetura de microsserviços utilizando o ecossistema Spring Cloud. O objetivo é simular um sistema de gerenciamento de tarefas que notifica os usuários sobre prazos iminentes.

O projeto é composto por três serviços principais que são orquestrados e containerizados com Docker e Docker Compose.


🏛️ Arquitetura

A arquitetura é dividida nos seguintes microsserviços:

  1. service-main (Porta: 8888)

    • Função: Atua como o pilar de infraestrutura da arquitetura.
    • Componentes:
      • Eureka Server: Responsável pelo registro e descoberta de serviços (Service Discovery). Todos os outros microsserviços se registram no Eureka para que possam se comunicar uns com os outros usando os nomes dos serviços em vez de IPs e portas fixas.
      • Spring Cloud Config Server: Centraliza a configuração de todos os microsserviços. As configurações são carregadas a partir de um repositório Git externo, permitindo a alteração de propriedades sem a necessidade de reconstruir as aplicações.
  2. service-tasks (Porta: 8081)

    • Função: Serviço principal de negócio, responsável por gerenciar as tarefas.
    • Funcionalidades:
      • Expõe um endpoint POST /tasks para criar novas tarefas.
      • Utiliza um banco de dados em memória (H2) para persistir as tarefas.
      • Possui um agendador (@Scheduled) que verifica periodicamente as tarefas com prazo próximo.
      • Usa OpenFeign para se comunicar de forma declarativa com o service-notification.
  3. service-notification (Porta: 8082)

    • Função: Serviço simples responsável por processar e enviar notificações.
    • Funcionalidades:
      • Expõe um endpoint POST /notification que recebe os detalhes da notificação.
      • Na implementação atual, ele apenas exibe a mensagem de notificação no console do contêiner.

🛠️ Tecnologias Utilizadas

  • Linguagem/Framework: Java 21, Spring Boot 3.5.5
  • Ecossistema Spring Cloud:
    • Spring Cloud Netflix Eureka: Para Service Discovery.
    • Spring Cloud Config: Para gerenciamento centralizado de configurações.
    • Spring Cloud OpenFeign: Para comunicação síncrona e declarativa entre serviços.
  • Banco de Dados: H2 Database (In-Memory)
  • Containerização: Docker e Docker Compose
  • Build Tool: Maven
  • Outros: Spring Data JPA, Lombok.

🌊 Fluxo de Execução Principal

  1. Criação da Tarefa: Um usuário envia uma requisição POST para http://localhost:8081/tasks com os detalhes da tarefa (título, e-mail, prazo).
  2. Persistência: O service-tasks recebe a requisição, cria uma TaskEntity e a salva no banco de dados H2.
  3. Agendamento: A cada minuto, o TaskNotificationSchedule dentro do service-tasks é acionado.
  4. Verificação de Prazos: O agendador consulta o banco de dados em busca de tarefas que estão próximas do vencimento e que ainda não foram notificadas.
  5. Comunicação Inter-serviços: Para cada tarefa encontrada, o service-tasks utiliza seu cliente OpenFeign (NotificationClient) para fazer uma chamada POST para o endpoint /notification do service-notification.
  6. Envio da Notificação: O service-notification recebe a chamada e imprime a mensagem de notificação no seu log, simulando o envio.
  7. Atualização de Status: O service-tasks marca a tarefa como notificada (notified = true) para evitar o reenvio de notificações.

🚀 Como Executar o Projeto

Certifique-se de ter os seguintes pré-requisitos instalados em sua máquina:

  • Git
  • Java 21 (ou superior)
  • Maven
  • Docker
  • Docker Compose

Passos para Execução

  1. Clone o repositório:

    git clone <URL_DO_SEU_REPOSITORIO>
    cd <NOME_DO_DIRETORIO>
  2. Suba os contêineres com Docker Compose: Navegue até o diretório raiz do projeto (onde o arquivo docker-compose.yml está localizado) e execute o seguinte comando:

    docker-compose up --build

    Este comando irá construir as imagens Docker para cada serviço e iniciar os contêineres na ordem correta, respeitando as dependências definidas no docker-compose.yml.

  3. Verifique se os serviços estão de pé:

    • Painel do Eureka Server: Acesse http://localhost:8888 em seu navegador. Você deverá ver SERVICE-TASKS e SERVICE-NOTIFICATION registrados na lista de instâncias.
    • Logs dos Contêineres: Você pode acompanhar os logs de cada serviço no terminal onde o docker-compose está rodando.

📡 Endpoints da API

Service Main

  • Eureka Dashboard: http://localhost:8888
  • Config Server (para service-tasks): http://localhost:8888/config/service-tasks/default

Service Tasks

  • Criar uma nova tarefa:
    • POST http://localhost:8081/tasks
    • Exemplo de Body (JSON):
      {
        "title": "Finalizar o relatório trimestral",
        "email": "usuario@exemplo.com",
        "dueDate": "2025-09-24T10:00:00",
        "notified": false
      }
  • Console do Banco H2: http://localhost:8081/h2-console
    • JDBC URL: jdbc:h2:mem:testdb
    • User Name: sa
    • Password: (deixe em branco)

💡 Pontos de Melhoria

  • API Gateway: Adicionar um Spring Cloud Gateway como ponto de entrada único para o sistema, gerenciando rotas, segurança e rate limiting.
  • Banco de Dados Persistente: Substituir o H2 por um banco de dados como PostgreSQL ou MySQL para persistir os dados.
  • Sistema de Notificação Real: Implementar uma lógica de envio de e-mails (usando JavaMailSender) ou mensagens (integrando com RabbitMQ/Kafka) no service-notification.
  • Segurança: Implementar autenticação e autorização usando Spring Security com OAuth2/JWT.
  • Configuração do Agendador: O fixedRate no @Scheduled está configurado para um valor muito baixo (60 milissegundos). Para um cenário real, o ideal seria um valor maior, como 3600000 (1 hora).

About

Arquitetura de microsserviços utilizando o ecossistema Spring Cloud. O projeto é composto por três serviços principais que são orquestrados e containerizados com Dockerfile e Docker Compose.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published