Dieses Projekt ist eine einfache Shop-Anwendung, die auf einer Microservices-Architektur basiert.
Die folgenden Technologien werden verwendet:
- Backend: Java, Spring Boot
- Frontend: React
- Containerisierung: Docker
- Service Discovery: Eureka
- Messaging: Kafka
- Funktion: Verwalten und Anzeigen von Produkten.
- Endpoints:
HTTP-Methode | Endpoint | Beschreibung |
---|---|---|
GET | /api/products |
Alle Produkte anzeigen |
GET | /api/products/{id} |
Produkt nach ID anzeigen |
POST | /api/products |
Neues Produkt hinzufügen |
PUT | /api/products/{id} |
Produkt aktualisieren |
DELETE | /api/products/{id} |
Produkt löschen |
- Beschreibung:
Der Produktkatalog-Service verwaltet alle Produkte mit Informationen wie Name, Beschreibung, Preis und Lagerbestand. Er stellt die grundlegenden CRUD-Operationen bereit, um Produkte zu erstellen, zu aktualisieren, anzuzeigen und zu löschen.
- Funktion: Verwalten des Warenkorbs der Benutzer.
- Endpoints:
HTTP-Methode | Endpoint | Beschreibung |
---|---|---|
POST | /api/cart/{userId}/add |
Produkt zum Warenkorb hinzufügen |
GET | /api/cart/{userId} |
Aktuellen Warenkorb anzeigen |
DELETE | /api/cart/{userId}/remove |
Produkt aus dem Warenkorb entfernen |
DELETE | /api/cart/{userId}/clear |
Warenkorb vollständig leeren |
- Beschreibung:
Der Warenkorb-Service ermöglicht es Benutzern, Produkte in ihren Warenkorb zu legen, Produkte zu entfernen und den gesamten Warenkorb zu leeren. Die Daten werden schnell und effizient in einer Redis-Datenbank gespeichert.
- Funktion: Verarbeiten von Kundenbestellungen.
- Endpoints:
HTTP-Methode | Endpoint | Beschreibung |
---|---|---|
GET | /api/orders |
Alle Bestellungen abrufen |
GET | /api/orders/{id} |
Bestellung nach ID abrufen |
POST | /api/orders |
Neue Bestellung erstellen |
DELETE | /api/orders/{id} |
Bestellung nach ID löschen |
- Beschreibung:
Der Bestellungs-Service verarbeitet neue Bestellungen, speichert diese und stellt den Bestellstatus bereit. Nach erfolgreicher Bestellung wird der Warenkorb geleert, und die Bestellung wird im System hinterlegt.
-
Funktion: Zentraler Einstiegspunkt für alle Anfragen.
-
Beschreibung:
Das API Gateway empfängt Anfragen vom Frontend und leitet sie dynamisch an die entsprechenden Microservices weiter. Es übernimmt dabei Routing, Lastverteilung und dient als zentrale Schnittstelle zwischen dem Frontend und den Microservices.- Konfigurierte Routen:
Service Route Ziel-Microservice Produktkatalog /api/products/**
Produktkatalog-Service Warenkorb /api/cart/**
Warenkorb-Service Bestellungen /api/orders/**
Bestellungs-Service
- Funktion: Service-Registrierung und -Erkennung.
- Beschreibung:
Der Eureka Discovery Service registriert alle Microservices und ermöglicht die automatische Service-Erkennung. Dadurch können Services untereinander kommunizieren, ohne dass feste IP-Adressen oder Ports notwendig sind. Dies erleichtert Skalierung und Fehlertoleranz erheblich.
-
Funktion: Benutzeroberfläche für den Shop.
-
Features:
- Produktübersicht: Zeigt alle verfügbaren Produkte an.
- Warenkorb-Verwaltung: Produkte hinzufügen, Menge ändern, entfernen.
- Bestellung aufgeben: Warenkorb in eine Bestellung umwandeln.
- Bestellübersicht: Anzeige aller Bestellungen mit Status.
-
Beschreibung:
Die React-Anwendung kommuniziert mit dem API Gateway und ermöglicht es dem Benutzer, Produkte zu durchsuchen, den Warenkorb zu verwalten und Bestellungen aufzugeben. Anfragen laufen gebündelt über das Gateway, das die Anfragen an die Microservices weiterleitet.
- Funktion: Containerisierte Bereitstellung der gesamten Anwendung.
- Beschreibung:
Alle Microservices (Produktkatalog, Warenkorb, Bestellungen), das API Gateway, Eureka und der Frontend-Service werden über Docker containerisiert. Mit Docker-Compose werden alle Komponenten gemeinsam gestartet und verwaltet.
- Frontend (React): Der Benutzer interagiert mit der App, die Anfragen an das API Gateway sendet.
- API Gateway: Leitet Anfragen dynamisch an die passenden Microservices weiter.
- Eureka: Verbindet und verwaltet alle Microservices.
- Produktkatalog-Service: Zeigt Produkte an.
- Warenkorb-Service: Verwalten des Warenkorbs.
- Bestellungs-Service: Verarbeitet Bestellungen.
- Docker: Startet und verwaltet alle Komponenten.
- Kafka Integration: Für eventbasierte Kommunikation (z.B. Versand nach Bestellung).
- JWT-Authentifizierung: Schutz sensibler Endpunkte.
- Fehlertoleranz: Circuit Breaker (z.B. Resilience4j).
- Monitoring: Mit Spring Boot Actuator oder Grafana.
Hier ist eine ausgefüllte Reflexion basierend auf dem ersten Termin und der Arbeit an Vorbereitungen.pdf:
- Erstellung der Architekturskizze, die die Interaktionen zwischen den Microservices zeigt.
- Definition der Microservices und ihrer Aufgaben.
- Vorbereitung der Projektstruktur und Einrichtung des Git-Repositories.
- Wir haben eine klare grafische Darstellung der Microservices erstellt.
- Die wichtigsten Workflows wurden definiert.
- Wir haben ein Repository eingerichtet.
- Es war anfangs schwierig, die passenden Tools für die Architekturskizze auszuwählen. Wir haben uns für Draw.io entschieden.
- Wir mussten viel diskutieren, um die Aufgaben der Microservices genau zu definieren.
- Nächstes Mal starten wir mit der Implementierung der Microservices.
- Einrichtung des Produktkatalog-Services als erste Komponente.
- Erstellung der grundlegenden Datenbankkonfiguration.
- Am Ende des Tages sollten wir einen Microservice haben.
- Am Ende des Tages sollten wir ein funktionierendes Frontend haben.
- Wir sollten uns die Aufgaben aufteilen und klar definieren.
- Wir konnten die Aufgaben klar definieren.
- Wir haben mit dem Produktkatalog-Service angefangen.
- Wir haben mit dem Frontend angefangen.
- Wir hatten ein paar Probleme mit dem Aufsetzen von React und Spring Boot.
- Nächstes Mal müssen wir mit dem Produktkatalog-Service fertig werden und mit dem Warenkorb-Service anfangen.
- Datum:
16.01.2025
- Projektname:
M321 - Shopping App Microservices
- Was waren die Hauptziele des Projekts?
-
Drei Mirco services sind erstellt
- Produktkatalog-Service
- Warenkorb-Service
- Bestellungs-Service
-
API Gateway
-
Eureka Discovery Service
-
Frontend mit CRUD Operationen
-
Microservices sind in Docker-Container verpackt
-
Microservices kommunizieren via REST API miteiannder
-
Apache Kafka Messaging für Logging von Fehlern, Warning und Infos über User-Aktionen
-
User Login mit Session Token
-
API Gateway beschränken auf angemeldete User
-
Alle Services haben eine eigene Datenbank für Caching von Daten
- Warenkorb-Service - Redis
- Produktkatalog-Service - Spring Datenbank
- Bestellungs-Service - Spring Datenbank
- Welche Ziele wurden realisiert?
-
Drei Mirco services sind erstellt
- Produktkatalog-Service
- Warenkorb-Service
- Bestellungs-Service
-
API Gateway
-
Eureka Discovery Service
-
Frontend mit CRUD Operationen
-
Microservices kommunizieren via REST API miteiannder
- Welche Punkt sind noch offen?
- Microservices sind in Docker-Container verpackt
- Apache Kafka Messaging für Logging
- Welche Herausforderungen sind aufgetreten?
Kafka war eher kompliziert einzurichten, dazu sahen wir den Nutzen nicht wirklich, da das logging auch anders viel einfacher umzusetzen wäre.
Die MIcro Services zu dockerisieren wäre nicht allzu schwer gewesen, jedoch haben wir uns entschieden, dass es nicht nötig ist, da wir acuh kafka nicht implementiert haben und wir dadurch keinen Grund hatten.
- Was wurde aus dem Projekt gelernt?
Uns wurde erst jetzt klar, wie spannend der Eureka Discovery Service eigentlich ist. Dazu war es interessant zu sehen wie anders so ein Programm bestehend aus Microservices aufgebaut ist. Vor allem mit dem Kontrast zum anderen Projekt.
- Welche neuen Fähigkeiten oder Kenntnisse wurden erworben?
Wir konnten unser bestehendes Wissen mit Microservices vertiefen und haben auch einiges über den Eureka Discovery Service gelernt. So ganze Projekte von null auf hundert zu erarbeiten mit Datenbank und allen drum und dran war eine Gute erfahrung, die wir bis jetzt im Schulplan vermissten.
- Was könnte in zukünftigen Projekten verbessert werden?
Wir müssen unbedingt verbesserungen in den Bereichen Dokumentation und Planung machen, wie kamen ein wenig in den Stress, da wir uns noch nie so intensiv mit Microservices auseinander gesetzt haben und dazu viel zu wenig geplant hatten im Voraus.
- Welche Strategien könnten implementiert werden, um ähnliche Herausforderungen zu vermeiden?
EIne Strukturierte Planung und Dokumentation ist das A und O, das haben wir in diesem Projekt gelernt.
Wir sind stoltz auf unsere Arbeit und denken sie zeigt was wir können, jedoch gibt es noch viel zu lernen und zu verbessern. (Siehe Welche Punkt sind noch offen?)
Dovalo / Aroldi