{"id":21605932,"url":"https://github.com/matheusvidal21/ead-microservices","last_synced_at":"2026-05-17T09:36:50.035Z","repository":{"id":256594708,"uuid":"855874904","full_name":"matheusvidal21/ead-microservices","owner":"matheusvidal21","description":"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.","archived":false,"fork":false,"pushed_at":"2024-12-23T16:24:35.000Z","size":210,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-25T05:03:25.806Z","etag":null,"topics":["java","microservices","spring"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/matheusvidal21.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-09-11T15:43:31.000Z","updated_at":"2024-12-23T16:24:39.000Z","dependencies_parsed_at":"2025-03-18T14:41:10.092Z","dependency_job_id":"9903deb6-a2c9-4b87-9a85-b6f3c5bf017a","html_url":"https://github.com/matheusvidal21/ead-microservices","commit_stats":null,"previous_names":["matheusvidal21/ead-microservices"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/matheusvidal21/ead-microservices","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matheusvidal21%2Fead-microservices","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matheusvidal21%2Fead-microservices/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matheusvidal21%2Fead-microservices/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matheusvidal21%2Fead-microservices/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/matheusvidal21","download_url":"https://codeload.github.com/matheusvidal21/ead-microservices/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matheusvidal21%2Fead-microservices/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280906435,"owners_count":26411415,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-25T02:00:06.499Z","response_time":81,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","microservices","spring"],"created_at":"2024-11-24T20:18:15.876Z","updated_at":"2025-10-25T05:03:45.301Z","avatar_url":"https://github.com/matheusvidal21.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Finalizado](https://img.shields.io/badge/Status-Conclu%C3%ADdo-brightgreen)](https://github.com/matheusvidal21/ead-microservices)\n\n\u003ch1 align=\"center\"\u003e🚀 EAD Microservices\u003c/h1\u003e\n\n\u003cp align='center'\u003e \n    \u003cimg src=\"https://img.shields.io/badge/Spring_Boot-F2F4F9?style=for-the-badge\u0026logo=spring-boot\"/\u003e\n    \u003cimg src=\"https://img.shields.io/badge/java-%23ED8B00.svg?style=for-the-badge\u0026logo=openjdk\u0026logoColor=white\"/\u003e  \n    \u003cimg src=\"https://img.shields.io/badge/JWT-F2F4F9?style=for-the-badge\u0026logo=JSON%20web%20tokens\u0026logoColor=black\"/\u003e\n    \u003cimg src=\"https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge\u0026logo=docker\u0026logoColor=white\"/\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Rabbitmq-FF6600?style=for-the-badge\u0026logo=rabbitmq\u0026logoColor=white\"/\u003e\n    \u003cimg src=\"https://img.shields.io/badge/postgres-%23316192.svg?style=for-the-badge\u0026logo=postgresql\u0026logoColor=white\"/\u003e\n\u003c/p\u003e    \n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/bf7c6b5e-00a9-4539-850f-1e1e81cdc96a\" alt=\"Logo DSCommerce\" height=\"600\"\u003e\n\u003c/p\u003e\n\nBem-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. \n\nPara 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.\n\n---\n\n## 🏗️ Arquitetura de Microservices\n\nEste 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.\n\n### **Microservices Principais**\n\n1. **AuthUser 🔐**:\n   - Gerencia a autenticação e autorização de usuários.\n   - Implementa **Spring Security** com suporte para JWT.\n\n2. **Course 📚**:\n   - Responsável por gerenciar cursos, módulos, lições e inscrições.\n\n3. **Notification 📣**:\n   - Lida com notificações e alertas para os usuários.\n\n---\n\n## 🛠️ Tecnologias Utilizadas\n\n### **Linguagem e Frameworks**\n- **Java 17** ☕\n- **Spring Boot 3.1.0** 🌱:\n  - Spring Web (APIs RESTful)\n  - Spring Data JPA (Banco de dados)\n  - Spring Security (Autenticação/Autorização)\n  - Spring Cloud (Padrões de microsserviços)\n\n### **Banco de Dados**\n- **PostgreSQL** 🗃️\n- Docker para provisionamento do banco de dados.\n\n### **Mensageria**\n- **RabbitMQ** 🐇:\n  - Comunicação assíncrona entre microservices.\n\n### **Outras Ferramentas**\n- **Spring Cloud Netflix Eureka** 📡: Service Registry.\n- **Spring Cloud Config Server** 📜: Gerenciamento centralizado de configurações para todos os microservices.\n- **Resilience4j** 🔄: Implementação de Circuit Breaker e Retry.\n- **Orika Mapper** 🗺️: Ferramenta de mapeamento de objetos Java para conversões rápidas e eficientes entre DTOs e entidades.\n- **Lombok** ✂️: Redução de verbosidade no código.\n\n---\n\n## 📂 Estrutura do Repositório\n\n- **`api-gateway`**: Microservice que atua como o ponto único de entrada da aplicação, roteando requisições para os serviços internos.\n  \n- **`config-server`**: Fornece gerenciamento centralizado de configurações.\n\n   **`service-registry`**: Registro de serviços com Eureka.\n  \n- **`authuser`**: Gerencia autenticação, autorização e usuários.\n  \n- **`course`**: Serviço responsável por cursos, módulos e lições.\n  \n- **`notification`**: Serviço que gerencia as notificações.\n  \n- **`notification-hex`**: Serviço de notificações com arquitetura hexagonal.\n  \n- **`docker-compose.yml`**: Provisiona banco de dados necessários para cada serviço.\n  \n- **`init-db.sh`**: Script para inicializar o banco de dados.\n\n---\n\n## 🚦 Funcionalidades Implementadas\n\n### **Comunicação e Padrões**\n\n#### **API Gateway Pattern**\n- Utilizado para roteamento centralizado de requisições.\n- Implementado com Spring Cloud Gateway e Service Registry.\n\n#### **Service Registry Pattern**\n- Gerenciado com Eureka Server.\n- Permite a descoberta dinâmica de serviços.\n\n#### **Config Server**\n- Gerenciamento centralizado de configurações em um repositório git.\n- Atualização em tempo de execução com Spring Cloud Config.\n\n#### **API Composition Pattern**\n- Comunicação síncrona entre microservices para compor dados de múltiplos serviços.\n\n### **Comunicação Síncrona**\n- Inscrição de usuários em cursos.\n- Deleção de dados com integração entre microservices.\n\n### **Comunicação Assíncrona**\n- **Mensageria com RabbitMQ**:\n  - Eventos de notificação entre serviços.\n- **Event-Carried State Transfer**:\n  - Transferência de estado por meio de eventos.\n\n### **Confiabilidade**\n- Implementação do **Circuit Breaker Pattern** com Resilience4j para melhorar a resiliência de falhas.\n\n### **Autenticação e Autorização**\n- **JWT (Json Web Token)**:\n  - Autorização baseada em papéis (Roles).\n  - Integração de autenticação entre microservices.\n\n---\n\n## ⚙️ Configuração e Execução\n\n### **Requisitos**\n- JDK 17\n- Maven\n- Docker\n\n### **Instalação**\n\n1. Clone o repositório:\n```bash\ngit clone git@github.com:matheusvidal21/ead-microservices.git\ncd ead-microservices\n```\n\n2. Inicie containers para criar os bancos de dados:\n```bash\ndocker-compose up -d\n```\n\n3. Inicie os microsserviços principais:\n  - service-registry\n  - config-server\n  - api-gateway\n\n4. Inicie os demais microsserviços:\n  - auth-user\n  - courses\n  - notification\n\n# 👥 Autor\n\n| [\u003cimg src=\"https://avatars.githubusercontent.com/u/102569695?s=400\u0026u=f20bbb53cc46ec2bae01f8d60a28492bfdccbdd5\u0026v=4\" width=115\u003e\u003cbr\u003e\u003csub\u003eMatheus Vidal\u003c/sub\u003e](https://github.com/matheusvidal21) |\n| :---: |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatheusvidal21%2Fead-microservices","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmatheusvidal21%2Fead-microservices","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatheusvidal21%2Fead-microservices/lists"}