feat: Health-Check-Ports und Service-URLs konsolidiert, Consul-Best-Practices umgesetzt

Signed-off-by: StefanMoCoAt <stefan.mo.co@gmail.com>
This commit is contained in:
2026-04-16 21:26:54 +02:00
parent dd76ad6d14
commit 26b3b193ca
19 changed files with 130 additions and 43 deletions
@@ -0,0 +1,50 @@
# 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.