Spring Boot Microservices Lab
Laboratorio pratico di microservizi con Spring Cloud, Eureka, Gateway, Kafka e Resilience4j
- Stato
- WIP
- Licenza
- MIT
- Categoria
- Didattici
- Aggiornato
Stato del progetto
Descrizione
Spring Boot Microservices Lab è il follow-up naturale di Spring Boot From Scratch: parti da una monolith funzionante e la decomponi in microservizi reali, affrontando i problemi che emergono solo quando hai più servizi (network failure, distributed tracing, event consistency, schema evolution). Il laboratorio modella un dominio e-commerce semplificato (catalog-service, order-service, payment-service, notification-service) e copre: service discovery con Eureka (alternativa Consul/Kubernetes service mesh discussa), API gateway con Spring Cloud Gateway + rate limiting + JWT propagation, circuit breaker e bulkhead con Resilience4j, event-driven architecture con Kafka (producer/consumer + Dead Letter Topic + idempotency key), distributed tracing con OpenTelemetry + Jaeger, observability con Prometheus + Grafana dashboards pre-built. Ogni step ha un branch git con codice funzionante, una guida MkDocs con diagrammi C4 (livello 2 e 3) e una sezione 'cosa va male' che simula failure (kill un servizio, network partition, Kafka broker down) per mostrare come Resilience4j e retry policies reagiscono. La filosofia è 'distributed-by-design': non insegniamo a fare microservizi a tutti i costi (la monolith modulare è spesso meglio), ma a costruirli bene quando servono davvero. License MIT, codice riutilizzabile come scaffold per progetti enterprise. Il dominio e-commerce è scelto per essere familiare ma non triviale—abbastanza complesso da mostrare il valore dell'event-driven, abbastanza semplice da non distrarre dai pattern.
Funzionalità chiave
Service discovery con Eureka
Eureka server + 4 microservizi client, health check, self-preservation mode, fallback a hardcoded URL list se Eureka down.
API Gateway Spring Cloud
Routing predicate-based, filter chain custom (JWT validation + rate limiting + request logging), CORS centralizzato.
Resilience4j: circuit breaker + bulkhead
Pattern circuit breaker con fallback method, bulkhead per isolare thread pool, retry con exponential backoff, time limiter.
Event-driven con Kafka
Producer transactional, consumer con manual ack, Dead Letter Topic, idempotency key con Redis dedupe, schema evolution con Avro + Schema Registry.
Distributed tracing
OpenTelemetry SDK + Micrometer Tracing, span context propagation HTTP + Kafka, visualizzazione Jaeger UI.
Observability stack pre-built
Docker compose con Prometheus + Grafana + Loki + Jaeger, dashboard JSON pronte (golden signals: rate, errors, duration, saturation).
Chaos engineering exercises
Script che simulano failure (kill container, network partition con tc netem, Kafka broker down) per testare la resilienza.
Saga pattern + outbox
Implementazione saga pattern per transazioni distribuite ordine→pagamento→notifica, outbox table per eventual consistency con Debezium opzionale.
Tech stack
- Spring Boot 3.4
- Spring Cloud 2024
- Java 21
- Eureka
- Spring Cloud Gateway
- Resilience4j
- Apache Kafka
- OpenTelemetry
- Prometheus
- Grafana
- Jaeger
- Docker Compose
Casi d'uso
- Sviluppatori mid-senior che vogliono imparare microservizi Spring senza fare cargo-culting cloud-native
- Team che migrano da monolith a microservizi e vogliono un reference architecture sperimentale
- Bootcamp avanzati che cercano un lab realistico con failure injection e chaos engineering
- Architetti che vogliono mostrare al team trade-off concreti (consistency vs availability, service mesh vs gateway)
Roadmap
- v0.1.0 Pianificata
Service discovery + Gateway baseline
- Setup Eureka server + 4 microservizi base
- Spring Cloud Gateway con routing predicate
- JWT propagation across services
- Docker compose stack base
- v0.5.0 Pianificata
Resilience + Event-driven
- Resilience4j circuit breaker + bulkhead su 3 endpoint critici
- Kafka integration con producer/consumer transactional
- Dead Letter Topic + retry policy
- Saga pattern su flow ordine-pagamento
- v1.0.0 Pianificata
Observability + Chaos engineering
- OpenTelemetry tracing end-to-end
- Grafana dashboards golden signals
- Script chaos engineering (kill, partition, slow)
- Documentazione completa + deploy guide K8s opzionale
A chi è rivolto
Quick Start
Avvia il progetto localmente in pochi comandi.
# Quick start (work-in-progress, repo non ancora pubblicato)
# git clone https://github.com/<tba>/spring-boot-microservices-lab.git
# cd spring-boot-microservices-lab
# docker compose up -d kafka eureka prometheus grafana
# ./mvnw -pl catalog-service spring-boot:run
# ./mvnw -pl order-service spring-boot:runContribuisci al progetto
Spring Boot Microservices Lab è open source. Apri una issue, proponi una pull request o lascia una stella su GitHub: ogni contributo, anche piccolo, è benvenuto.
- ⭐ Lascia una stella se ti è utile
- 🐛 Segnala bug o proponi feature via issue
- 🔧 Invia pull request con fix o miglioramenti
- 📣 Condividi il progetto se lo trovi interessante