Introduzione
In questo articolo, esamineremo un’applicazione d’esempio che ho sviluppato ed uso per i miei corsi sull’architettura a Microservizi. L’applicazione è un semplice sistema di gestione di dati di persone, che consente di aggiungere, modificare e visualizzare le informazioni relative a ciascuna persona. In futuro potrebbe essere estesa per includere funzionalità più complesse, come la gestione di relazioni tra persone, lo scambio di messaggi tra persone, o l’integrazione con altri sistemi.
L’applicazione è composta da due microservizi principali:
- Person Service: gestisce le informazioni relative alle persone. Espone un’API REST per creare, leggere, aggiornare ed eliminare le informazioni delle persone. Utilizza il framework Spring Boot e comunica con un database PostgreSQL per memorizzare i dati delle persone.
- Person Web application: è un’applicazione web che consente di visualizzare e gestire le informazioni delle persone. Utilizza il framework Spring Boot per la creazione dell’interfaccia utente e comunica con il Person Service tramite chiamate REST, usando Spring Cloud Circuit Breaker (con Resilience4J) per gestire eventuali errori di comunicazione.

A questi si aggiungono altri servizi infrastrutturali:
- Eureka Service: è un servizio di discovery che consente ai microservizi di registrarsi e scoprire altri servizi.
- Config Service: gestisce la configurazione centralizzata dei microservizi.
Eseguire l’applicazione
Il codice sorgente dell’applicazione è disponibile su GitHub.
Per farne il build è necessario aver installato:
- Java 24+: ad esempio, da Adoptium, ma qualunque distribuzione devrebbe andare bene. Io di solito uso Liberica
- Docker: necessario anche per eseguire i test, che si basano su Testcontainers
Quindi, supponendo di avere quanto sopra già installato e pronto, i seguenti passaggi sono sufficienti per eseguire l’applicazione (git lo evete già, vero? 😉):
-
Clonare il repository:
Terminal window git clone https://github.com/benfante-teaching/microservices-demo.git -
Entrare nella cartella del progetto:
Terminal window cd microservices-demo -
Eseguire il build dell’applicazione e delle relative docker image:
Terminal window ./mvnw clean verify -
Eseguire l’applicazione con Docker Compose:
Terminal window docker compose up -
Aprire il browser e navigare su http://localhost:8082 per accedere all’applicazione web.
Altri elementi disponibili sono (ricorda, è un ambiente per insegnare: in un ambiente di produzione non sarebbero esposti, o sarebbero almeno protetti adeguatamente!):
- Swagger UI per i servizi di People Service: http://localhost:8081/swagger-ui.html
- Eureka Service Dashboard: http://localhost:8761
- H2 Console per accedere al database PostgreSQL: http://localhost:8081/h2-console. I parametri sono i seguenti:
- Saved Settings:
Generic PostgreSQL
- Driver Class:
org.postgresql.Driver
- JDBC URL:
jdbc:postgresql://people-postgres/people
- User Name:
people
- Password:
people
- Saved Settings:
- Database PostgreSQL: potete accedervi direttamente usando pgAdmin o un altro client SQL (ad esempio, DBeaver). Le credenziali sono le seguenti:
- Host:
localhost
- Porta:
54321
- Database:
people
- Utente:
people
- Password:
people
- Host:
Sviluppare i singoli microservizi
I progetti sono organizzati in moduli Maven, quindi potete sviluppare i singoli microservizi come singoli progetti Maven normali.
Per esempio, per sviluppare il Person Service, potete entrare nella cartella person-service
e usare i comandi Maven standard:
cd person-service./mvnw clean verify
Per eseguire il servizio durante lo sviluppo, potete usare:
./mvnw spring-boot:run
In questo modo, il servizio verrà eseguito sulla porta 8080, e tutte le sue dipendenze (People Web Application, Config Server, Eureka Server, ecc.) verranno eseguite automaticamente all’interno di container Docker, grazie al supporto per Docker Compose di Spring Boot.
Conclusione
In questo articolo abbiamo esaminato un’applicazione d’esempio che illustra l’architettura a Microservizi. Abbiamo visto come è strutturata l’applicazione, quali sono i suoi componenti principali e come eseguirla in locale. Abbiamo anche visto come sviluppare i singoli microservizi utilizzando Maven e Spring Boot.
Spero che questo esempio possa esservi utile per comprendere meglio l’architettura a Microservizi e come implementarla in un’applicazione reale. Se avete domande o commenti, non esitate a contattarmi!
In futuro, l’applicazione verrà estesa per includere esempi su altri argomenti che intendo approfondire nei miei prossimi corsi, come ad esempio:
- Spring Cloud Gateway: per gestire le chiamate tra i microservizi e l’applicazione web
- Spring Cloud Stream: per gestire la comunicazione tra i microservizi tramite eventi
- Deployment su Kubernetes
- Autenticazione e autorizzazione con OAuth2
- Monitoraggio e tracciamento delle chiamate tra i microservizi
- …altro? Fatemi sapere nei commenti!
Risorse utili
- Project repository
- Spring Boot
- Spring Cloud
- Spring Cloud Circuit Breaker
- Spring Cloud Config
- Spring Cloud Commons
- Spring Boot Docker Compose Support
- Spring Boot Database Initialization
- Testcontainers