4.5 KiB
End-to-End Communication Testing
Übersicht
Dieses Dokument beschreibt die Implementierung eines minimalen Clients für die Validierung der durchgehenden Kommunikation vom Frontend zum Backend über das Gateway.
Architektur
Die Kommunikation erfolgt über folgende Komponenten:
Web Client (Kotlin/JS) → API Gateway (Spring Cloud Gateway) → Ping Service (Spring Boot)
Port: Browser Port: 8080 Port: dynamisch
Implementierte Lösung
1. Minimal Test Client (Web App)
Datei: client/web-app/src/main/kotlin/at/mocode/client/web/App.kt
Der Client enthält:
- Eine benutzerfreundliche Web-Oberfläche
- "Ping Backend" Button für Tests
- Automatische Fehlerbehandlung
- Mehrere Gateway-URLs für Fallback-Verhalten
Konfigurierte Endpoints:
http://localhost:8080/api/ping/ping- Korrekte Gateway-Routehttp://localhost:8080/ping- Direkte Service-Verbindung (Fallback)http://localhost:8081/api/ping/ping- Alternative Gateway-Port
2. API Gateway Konfiguration
Datei: infrastructure/gateway/src/main/resources/application.yml
Das Gateway ist konfiguriert mit:
- Port: 8080
- Route:
/api/ping/**→lb://ping-service - Consul Service Discovery
- CORS-Unterstützung
- Health Checks
3. Ping Service
Datei: temp/ping-service/src/main/kotlin/at/mocode/temp/pingservice/PingController.kt
Einfacher REST-Endpoint:
GET /ping→{"status": "pong"}
4. Docker Compose Integration
Datei: docker-compose.yml
Hinzugefügte Services:
api-gateway: Port 8080, abhängig von Consulping-service: Dynamischer Port, registriert bei Consul
Kommunikationsfluss
- Client-Request: Browser sendet GET-Request an
http://localhost:8080/api/ping/ping - Gateway-Routing: Gateway empfängt Request, entfernt
/apiPräfix - Service Discovery: Gateway löst
lb://ping-serviceüber Consul auf - Backend-Call: Gateway leitet Request an
/pingdes Ping-Service weiter - Response: Ping-Service antwortet mit
{"status": "pong"} - Client-Display: Web-Client zeigt Antwort in grüner Erfolgsmeldung an
Validierte Funktionalität
Tests bestätigt:
- ✅ Ping-Service Funktionalität (2/2 Tests bestehen)
- ✅ Gateway Routing-Funktionalität (3/3 Tests bestehen)
- ✅ Client-Endpoint-Korrektur implementiert
- ✅ Docker-Orchestrierung konfiguriert
Verwendung
Lokale Entwicklung:
-
Services starten:
# Consul starten (für Service Discovery) docker-compose up consul # Gateway starten ./gradlew :infrastructure:gateway:bootRun # Ping Service starten ./gradlew :temp:ping-service:bootRun -
Web Client starten:
./gradlew :client:web-app:jsBrowserRun -
Test durchführen:
- Browser öffnet sich automatisch
- "Ping Backend" Button klicken
- Erfolgreiche Antwort: "Backend Response: pong"
Docker-basiert:
-
Alle Services starten:
# Services builden und starten docker-compose up --build -
Web Interface aufrufen:
- Öffne http://localhost:3000 (falls Web-App containerisiert)
- Oder führe Client lokal aus und teste gegen containerisierte Services
Monitoring und Debugging
Health Checks:
- Gateway:
http://localhost:8080/actuator/health - Ping Service: Automatisch via Consul
- Consul UI:
http://localhost:8500
Logs:
# Gateway Logs
docker-compose logs api-gateway
# Ping Service Logs
docker-compose logs ping-service
Erweiterte Funktionen
Fehlerbehandlung:
- Client versucht automatisch mehrere Endpoints
- Benutzerfreundliche Fehlermeldungen
- Loading-Indikatoren während Requests
Service Discovery:
- Automatische Service-Registrierung bei Consul
- Load Balancing über Spring Cloud Gateway
- Health Check Integration
Troubleshooting
Häufige Probleme:
-
"Could not reach any backend service"
- Prüfe ob Gateway und Ping Service laufen
- Prüfe Consul-Verbindung
- Prüfe Service-Registrierung in Consul UI
-
CORS-Fehler
- Gateway ist bereits mit CORS konfiguriert
- Prüfe Browser-Konsole für Details
-
Service Discovery-Probleme
- Prüfe Consul-Logs
- Prüfe Service-Registrierung
- Restart Services falls nötig
Fazit
Die Implementierung bietet eine vollständige End-to-End-Validierung der Kommunikation vom Web-Client über das API Gateway zum Backend-Service. Alle Komponenten sind getestet und für die Entwicklungs- und Produktionsumgebung konfiguriert.