Repository dedicata allo sviluppo del progetto del corso Programmazione orientata ai microservizi 2023/2024.
È utilizzato .NET versione 8.0 e Visual Studio Code come IDE. I pacchetti vengono quindi aggiunti manualmente tramite
dotnet add package [PACKAGE_NAME] -v 8.0
Ogni microservizio è sviluppato nella propria cartella e contiene un proprio database indipendente dagli altri; ognuno di questi viene avviato su un container dedicato.
L'insieme dei microservizi gestisce una libreria virtuale di spartiti musicali in formato pdf
. Gli spartiti sono scaricabili da chiunque mentre l'upload è associato ad un utente registrato. Ad ogni utente registrato è associata anche un'immagine di profilo ugualmente scaricabile.
Di seguito l'elenco dei microservizi e una breve descrizione:
AuthorsHandler
: gestisce gli autori degli spartiti musicali e le informazioni associate; viene comunicata in maniera asincrona eventuale aggiunta/aggiornamento/eliminazione di un autore.UsersHandler
: gestisce gli utenti registrati e le informazioni associate; viene comunicata in maniera asincrona eventuale aggiunta/aggiornamento/eliminazione di un utente.MusicalScoresHandler
: gestisce gli spartiti musicali e i filespdf
a loro associati. Implementa un sistema di caching automatico sfruttando Kafka e ClientHttp per gestire internamente una lista di autori e utenti esistenti nel sistema; se non viene trovata una corrispondenza locale al microservizio, viene effettuato un check tramite una chiamata http al rispettivo microservizio.
Nella cartella progettoMicroservizi
eseguire da terminale il comando:
docker compose up -d
per avviare tutti i microservizi e relativi DBs.
Di seguito gli URL per connettersi alle API tramite browser web:
-
Per connettersi utilizzare i parametri:
- Sistema:
PostgreSQL
- Server:
[ authors_dbms | users_dbms | scores_dbms ]
- Utente:
postgres
- Password:
password
- Database:
postgres
- Sistema:
Segue la mappatura di rete utilizzata:
- adminer 8080:8080
- authors_dbms 10000:5432
- authors_microservice 5000:5082
- users_dbms 10001:5432
- users_microservice 5001:5082
- scores_dbms 10002:5432
- scores_microservice 5002:5082
N.B. Una volta che un microservizio è lanciato in maniera containerizzata, la connectionString cambia in quanto non si usa più
Host=localhost
ma il nome del microservizio, ad es.Host=authors_dbms
(si occupa docker di fare da DNS). Per questo motivo ci sono due diversiappsettings.json
per ogni Api.
- .NET 6.0 - Connect to PostgreSQL Database with Entity Framework Core
- Official PostgreSQL docker image
È necessario come prima cosa installare il pacchetto NuGet che permette di utilizzare Entity Framework con PostgreSQL:
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL -v 8.0
Si possono aggiungere scripts *.sql
, *.sql.gz
, o *.sh
nella cartella /docker-entrypoint-initdb.d
.
Nota Bene
Il contenuto di questa cartella viene eseguito solo se il container viene lanciato con una cartella dati vuota (ossia
/var/lib/postgresql/data
); quindi se una query di uno script non va a buon fine e provate a rilanciare il container, gli scripts verranno saltati.
Nel campo Server bisogna indicare il nome di un servizio scelto nel docker-compose della solution (authors_dbms
ad esempio); infatti viene creata automaticamente una rete nomeSolution_database di tipo bridge a cui sono collegati i vari container.