Proyecto basado en una arquitectura de microservicios utilizando Spring Boot y Spring Cloud, implementando descubrimiento de servicios, API Gateway y tolerancia a fallos mediante Circuit Breaker.
El objetivo principal es demostrar comunicación entre microservicios de forma resiliente, aplicando buenas prácticas de separación de responsabilidades y utilizando PostgreSQL como base de datos relacional.
- Java 25
- Spring Boot
- Spring Cloud Eureka (Service Discovery)
- Spring Cloud Gateway (API Gateway)
- OpenFeign (Comunicación entre microservicios)
- Resilience4j (Circuit Breaker)
- PostgreSQL
- Spring Data JPA
- Maven
Servidor Eureka encargado del registro y descubrimiento dinámico de los microservicios.
Punto de entrada único para las solicitudes del cliente.
Centraliza el enrutamiento hacia los servicios registrados en Eureka.
Microservicio encargado de la gestión de usuarios.
Persiste la información en PostgreSQL utilizando Spring Data JPA.
Microservicio encargado de la creación de órdenes.
Se comunica con otros servicios mediante OpenFeign y está protegido con Circuit Breaker para evitar fallos en cascada.
Cliente
↓
API Gateway
↓
Microservicios (descubiertos dinámicamente mediante Eureka)
- El Gateway enruta las peticiones al servicio correspondiente.
- Los microservicios se registran automáticamente en Eureka.
- La comunicación entre servicios se realiza mediante OpenFeign.
- Las llamadas remotas están protegidas con Circuit Breaker (Resilience4j).
Se implementa Circuit Breaker para proteger la comunicación entre microservicios y evitar que un fallo en un servicio afecte a los demás.
| Escenario | Resultado |
|---|---|
| Error de negocio (ej. usuario no encontrado) | 404 |
| Servicio no disponible | 503 |
| Error de conexión / timeout | Se ejecuta fallback |
Se realiza una separación clara entre:
- Excepciones de negocio (404, validaciones)
- Fallos de infraestructura (timeout, conexión rechazada, servicio caído)
De esta manera, el circuito no se abre incorrectamente ante errores funcionales.
Cada microservicio se conecta de forma independiente a PostgreSQL.
Ejemplo de configuración:
spring:
datasource:
url: jdbc:postgresql://localhost:5432/service_db
username: tu_usuario
password: tu_passwordSe utiliza Spring Data JPA para la persistencia de datos.
Asegurarse de que PostgreSQL esté en ejecución y que las bases de datos necesarias estén creadas.
cd eureka-server
mvn spring-boot:runEjecutar cada servicio individualmente:
mvn spring-boot:runhttp://localhost:8080
- Descubrimiento de servicios con Eureka
- Enrutamiento centralizado con API Gateway
- Comunicación entre microservicios con OpenFeign
- Tolerancia a fallos con Circuit Breaker
- Separación adecuada entre errores de negocio e infraestructura
- Integración con PostgreSQL usando JPA
- Arquitectura distribuida básica con Spring Cloud
Adrian Garces
Demostrar una arquitectura de microservicios funcional aplicando patrones reales de Spring Cloud, enfocándose en descubrimiento de servicios, gateway y resiliencia ante fallos mediante Circuit Breaker, utilizando PostgreSQL como base de datos relacional.