3 microservices created with Spring Boot
Viele Menschen wollen sich gesund ernähren. Gewohnheiten zu ändern fällt es jedoch oft schwer. Wäre es leichter, wenn man einen Katalog erstellen könnte und dort verschiedene Rezepte, die er im Internet gefunden hat, bewerten könnte? Einen solchen Service für vegane Ernährung habe ich im Rahmen des VS-Modules entwickelt.
- Java Spring - Back-End
- Angular - Front-End
- PostgreSQL - Datenbank
- Postman - API Testing
- Docker - Containervirtualisierung
- ist verantwortlich für die Rezepteinformation
- nimmt eine Rezept-ID und liefert die Rezept-Information ("titel", "image", "sourceUrl") aus einer externen API zurück
- Port 8082
- API-Endpoint: http://localhost:8082/vegan-recipes/634792
- REST API, die CRUD Abfragen ermöglicht
- speichert die Benutzerbewertung in einer PostgreSQL Datenbank
- liefert die Benutzerbewertung mit den Feldern: "recipe_id" und "userRating"
- Port 8083
- API-Endpoints: http://localhost:8083/rating/list , http://localhost:8083/rating/show/1
- liefert Rezeptliste mit den Feldern: "recipe_id", "titel", "image", "sourceUrl" und "userRating"
- kommuniziert synchron mit zwei anderen Microservices über einen HTTP-Client, bekommt die Daten und stellt sie zusammen
- Port 8081
- API-Endpoint: http://localhost:8081/catalog/userid
- dem Benutzer wird eine Liste mit den Rezepten angezeigt, die er bewertet hat
- der Benutzer hat die Möglichkeit einen Rezept sich anzushauen, indem er auf den Button "Get the recipe" drückt
- http://localhost:4200
- haltet die Konfiguration der Microservices in einem zentralen Github-Repository https://github.com/SvitlanaG/Distributed-Systems-Project-Configs
- Port 8888
- fasst die Services, ihre Instanzen und Lokationen in einer Datenstruktur zusammen
- Port 8761
Da es eine externe API in dem Info-Service benutzt wird, kann dies mittels kaskadierenden Fehlern auch weitere Anwendungen zum Ausfall bringen. Um das zu vermeiden, ist ein Circuit Breaker eingesetzt. Dieses Verfahren lässt sich sehr leicht testen. Wenn WLAN deaktiviert ist, wird statt Rezepteinfo "n/a" ausgegeben.

Der Feign-Service erlaubt es, die Kommunikation zwischen Microservices abzubilden, ohne selbst den notwendigen Code für den Aufruf von RESTful Services schreiben zu müssen. In jedem der drei Services wurde ein Interface MyFeignClient und eine Klasse MyFeignController angelegt. Wenn man mehrere Instanzen von den Microservices erstellt, fragt FeignClient sie dann nach dem Round-Robin-Prinzip ab.
Alle Microservices wurden dockeriziert. Das ermöglicht Skalieren und ausführen der Services in einer Cloud-Infrastruktur.
- Docker installieren und starten, falls dies noch nicht erfolgt ist
- Terminal aufmachen
- Projekt clonen:
git clone git@github.com:SvitlanaG/Distributed-Systems-Project.gitodergit clone https://github.com/SvitlanaG/Distributed-Systems-Project.git
- zu dem Verzeichnis
persistencenavigieren:cd <checkout>/persistence/ - den Befehl
docker build --tag svitlana:postgres12 .ausführen - den Befehl
docker run --name postgres -p 5433:5432 -e POSGRESS_PASSWORD=test -d svitlana:postgres12ausführen - Ausführung überprüfen
docker ps
cd <checkout>/config-server/./mvnw clean installdocker build -t config-server .docker run -p 8888:8888 config-server
cd <checkout>/discovery-server/./mvnw clean installdocker build -t discovery-server .docker run -p 8761:8761 discovery-server
cd <checkout>/vegan-recipes-rating-data-service/./mvnw clean installdocker build -t vegan-recipes-rating-data-service .docker run -p 8083:8083 vegan-recipes-rating-data-service
cd <checkout>/vegan-recipes-info-service/./mvnw clean installdocker build -t vegan-recipes-info-service .docker run -p 8082:8082 vegan-recipes-info-service
cd <checkout>/vegan-recipes-catalog-service /./mvnw clean installdocker build -t vegan-recipes-catalog-service .docker run -p 8081:8081 vegan-recipes-catalog-service
Alternativ kann man das Projekt in einer IDE manuell starten.
- Node.js installieren
- zu dem Verzeichnis
vegan-recipes-uinavigieren:cd <checkout>/Distributed-Systems-Project/UI/vegan-recipes-ui - den Befehl
npm installausführen - den Befehl
npm startausführen - Plug-in Moesif Orign & CORS Changer installieren und auf "ON" setzen
- http://localhost:4200/ im Webbrowser öffnen
- GET
http://localhost:8083/rating/list
- GET by ID
http://localhost:8083/rating/show/1
- POST
http://localhost:8083/rating/new
{
"recipeId": "631913",
"rating": 2
}
- PUT
http://localhost:8083/rating/edit/6
{
"recipeId": "631913",
"rating": 5
}
- DELETE
http://localhost:8083/rating/delete/6undhttp://localhost:8083/rating/delete/6








