Enhanced `ping-service` documentation with architectural, implementation, and API details. Added a new journal entry outlining the troubleshooting steps for backend startup issues, including fixes for Dockerfile paths, Gradle build conflicts, and Keycloak pre-build configuration.
3.1 KiB
Journal: Inbetriebnahme Backend-Services
Datum: 2026-01-13
Beteiligte: Senior Backend Developer
Ziel: Erfolgreicher Start des api-gateway und des ping-service in der Docker-Umgebung.
Zusammenfassung
Beim Versuch, die Kern-Backend-Dienste über docker compose up zu starten, sind mehrere aufeinanderfolgende Build- und Konfigurationsfehler aufgetreten. Die Fehler deuten auf eine Desynchronisation zwischen der Projektstruktur, den Docker-Build-Skripten und den Spring-Cloud-Konfigurationen hin.
Diese Sitzung konzentrierte sich auf die iterative Identifizierung und Behebung dieser Probleme.
Gelöste Probleme
-
Fehlerhafte
COPY-Anweisungen in Dockerfiles:- Problem: Die Dockerfiles für
ping-serviceundapi-gatewayenthielten veralteteCOPY-Pfade, die auf eine alte Modulstruktur (backend/services/ping/ping-api) verwiesen. Dies führte zu "file not found"-Fehlern während des Docker-Builds. - Lösung: Die Pfade wurden korrigiert, um die aktuelle Projektstruktur (
contracts/ping-api) widerzuspiegeln. Die relevanten Dockerfiles waren:backend/services/ping/Dockerfilebackend/infrastructure/gateway/Dockerfile
- Problem: Die Dockerfiles für
-
Tippfehler in Keycloak-Dockerfile:
- Problem: Ein Tippfehler im Pfad (
/opt/keykeycloak/statt/opt/keycloak/) verhinderte den Build des Keycloak-Images. - Lösung: Der Pfad wurde in
config/docker/keycloak/Dockerfilekorrigiert.
- Problem: Ein Tippfehler im Pfad (
-
Parallele Gradle-Builds mit Cache-Konflikt:
- Problem: Der parallele Build von
api-gatewayundping-serviceführte zu einem Lock-Konflikt im geteilten Gradle-Cache (Timeout waiting to lock journal cache). - Lösung: Die Dockerfiles wurden angepasst, um benannte und getrennte Cache-Mounts für jeden Service zu verwenden (
id=gradle-cache-pingundid=gradle-cache-gateway), was den Konflikt behob.
- Problem: Der parallele Build von
Offene Probleme & Nächste Schritte
Nach den oben genannten Korrekturen tritt nun ein neuer Fehler während des Starts des api-gateway-Containers auf:
java.lang.IllegalArgumentException: Unable to find GatewayFilterFactory with name CircuitBreaker
Analyse:
- Das Spring Cloud Gateway versucht, eine Route zu laden, die einen
CircuitBreaker-Filter verwendet. - Die notwendige
GatewayFilterFactoryfür diesen Filter scheint zur Laufzeit nicht im Klassenpfad des Gateways verfügbar zu sein, obwohl die Abhängigkeitspring-cloud-starter-circuitbreaker-resilience4jin derbuild.gradle.ktsdeklariert ist.
Hypothese:
Das Problem liegt wahrscheinlich in der Konfiguration des Gateways. Eine der Konfigurationsquellen (vermutlich eine .yaml-Datei) definiert eine Route mit einem Circuit-Breaker-Filter, aber die dafür notwendige Spring-Cloud-Komponente wird nicht korrekt initialisiert.
Nächste Schritte:
- Die Konfigurationsquellen des
api-gatewaymüssen systematisch analysiert werden, um die Stelle zu finden, an der die fehlerhafteCircuitBreaker-Filter-Route definiert wird. - Es muss sichergestellt werden, dass die korrekte Spring-Cloud-Abhängigkeit für den Resilience4j-Gateway-Filter im
api-gatewayvorhanden und korrekt konfiguriert ist.