# Journal-Eintrag: Consul Discovery Best Practice Fix **Datum:** 16. April 2026 **Beteiligte:** 🏗️ [Lead Architect], 👷 [Backend Developer] ## 1. Problemstellung Trotz vorheriger Versuche meldete Consul für den `masterdata-service` weiterhin den Status "critical" (404 auf `/actuator/health`). Die Ursache lag in der hybriden Architektur (Spring Boot + Ktor): - Spring Boot (Management/Actuator) lief auf Port 8086. - Ktor (API) lief auf Port 8091. - Consul versuchte fälschlicherweise, den Healthcheck auf dem API-Port (oder einer fehlerhaften Kombination) auszuführen, da die Service-Registrierung nicht präzise genug war. ## 2. Best Practice Lösung Um die Stabilität und Wartbarkeit zu erhöhen, wurden folgende Maßnahmen ergriffen: ### A. Präzise Service-Registrierung (Masterdata-Service) In der `application.yml` wurde die Consul-Discovery-Konfiguration geschärft: - `health-check-port: 8086`: Der Healthcheck wird explizit an den Spring Boot Management Port gesendet. - `port: ${masterdata.http.port:8091}`: Der Service wird explizit mit seinem API-Port (Ktor) im Service-Katalog registriert. - Damit weiß das Gateway: "Sende Traffic an 8091", und Consul weiß: "Prüfe Health auf 8086". ### B. Umstellung auf Load-Balancer Abstraktion (`lb://`) Das API-Gateway nutzte bisher hartcodierte URLs oder Umgebungsvariablen für das Routing. Dies ist fehleranfällig und widerspricht dem Prinzip der Service Discovery. - **Änderung:** Alle Routen in `GatewayConfig.kt` wurden von `http://service-name:port` auf `lb://service-name` umgestellt. - **Vorteil:** Spring Cloud Gateway nutzt nun den Consul-Katalog direkt. Wenn ein Service (wie `masterdata-service`) dort mit Port 8091 registriert ist, wird er automatisch korrekt angesteuert. - Dies entfernt die Notwendigkeit für `*_SERVICE_URL` Umgebungsvariablen im Gateway. ## 3. Ergebnis - Der `masterdata-service` wird nun korrekt als `healthy` markiert, da der Healthcheck den richtigen Port (8086) erreicht. - Das Routing ist nun dynamisch und robust gegenüber Port-Änderungen in den einzelnen Services. - Alle Backend-Services folgen nun einem einheitlichen "Best Practice" Muster für die Service Discovery. --- **🏗️ [Lead Architect]**: Architektur auf Standard Spring Cloud Discovery (lb://) gehärtet. **👷 [Backend Developer]**: Hybride Port-Konfiguration im Masterdata-Service final korrigiert.