Fix(infra):

Datei: .junie/guidelines/technology-guides/docker/docker-development.md

Vorher:
- 194 Zeilen
- last_updated: 2025-09-15
- ~10 dokumentierte Befehle
- Falsche Befehlsnamen (service-build statt build-service)
- Falscher Port (8080 statt 8081)

Nachher:
- 756 Zeilen
- last_updated: 2025-11-11
- ~50+ dokumentierte Befehle
- Korrekte Befehlsnamen
- Korrekte Ports

Neue Sektionen:
24
Haupt-Sektionen gefunden

Korrigierte Dateien (API Gateway Port 8080 -> 8081):

1. infrastructure/gateway/README-INFRA-GATEWAY.md
   - 6 Stellen korrigiert (Docker-Befehle, Kubernetes, curl)

2. infrastructure/gateway/src/main/resources/openapi/documentation.yaml
   - 1 Server-URL korrigiert

3. infrastructure/README-INFRASTRUCTURE.md
   - 4 Stellen korrigiert (Prometheus, Kubernetes, curl)

4. services/masterdata/README-MASTERDATA.md
   - 3 curl Befehle korrigiert

5. .junie/guidelines/technology-guides/docker/docker-production.md
   - 1 Nginx upstream korrigiert

6. .junie/guidelines/technology-guides/docker/docker-monitoring.md
   - 1 Prometheus target korrigiert

NICHT korrigiert (korrekt auf Port 8080):
- Keycloak Health-Check (intern 8080, extern 8180)
- Test-Konfigurationen mit Keycloak issuer-uri
- Generische SERVICE_PORT Beispiele

Gesamt: 16 Korrekturen in 6 Dateien
This commit is contained in:
2025-11-11 22:52:48 +01:00
parent 02904fa345
commit 8e932758a7
22 changed files with 1780 additions and 206 deletions
+207
View File
@@ -0,0 +1,207 @@
# ===================================================================
# Environment Configuration Template - Meldestelle Project
# ===================================================================
# Copy this file to .env and customize the values for your environment
# Security Note: Never commit .env files containing production secrets!
# ===================================================================
# ===================================================================
# Build Configuration
# ===================================================================
# Docker image versions
DOCKER_GRADLE_VERSION=9.1.0
DOCKER_JAVA_VERSION=21
DOCKER_KEYCLOAK_VERSION=26.4.0
DOCKER_PROMETHEUS_VERSION=v2.54.1
DOCKER_GRAFANA_VERSION=11.3.0
# Application version
DOCKER_APP_VERSION=1.0.0
APP_VERSION=1.0.0
APP_NAME=Meldestelle
# Build metadata
BUILD_DATE=2025-11-11
# BUILD_DATE will be auto-generated if not set
# Spring profiles for services
SPRING_PROFILES_ACTIVE=docker,keycloak
DOCKER_SPRING_PROFILES_DEFAULT=default
DOCKER_SPRING_PROFILES_DOCKER=docker
# ===================================================================
# Infrastructure Services - Port Configuration
# ===================================================================
# Database
POSTGRES_DB=meldestelle
# Note: Username and password are now managed via Docker secrets
# Redis Cache
REDIS_PORT=6379
# Keycloak Authentication
KEYCLOAK_PORT=8180
KEYCLOAK_LOG_LEVEL=INFO
# Service Discovery
CONSUL_HOST=consul
CONSUL_PORT=8500
CONSUL_ENABLED=true
# Messaging
ZOOKEEPER_CLIENT_PORT=2181
KAFKA_PORT=9092
KAFKA_BROKER_ID=1
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1
# Monitoring
PROMETHEUS_PORT=9090
GRAFANA_PORT=3000
# ===================================================================
# Application Services - Port Configuration
# ===================================================================
# API Gateway
GATEWAY_HOST=api-gateway
GATEWAY_PORT=8081
# Microservices
PING_SERVICE_PORT=8082
MEMBERS_SERVICE_PORT=8083
HORSES_SERVICE_PORT=8084
EVENTS_SERVICE_PORT=8085
MASTERDATA_SERVICE_PORT=8086
AUTH_SERVICE_PORT=8087
MONITORING_SERVER_PORT=8088
# ===================================================================
# Client Applications - Port Configuration
# ===================================================================
# Web Application
WEB_APP_PORT=4000
WEB_APP_DOMAIN=localhost
NODE_ENV=production
# Nginx Configuration
NGINX_WORKER_PROCESSES=auto
NGINX_WORKER_CONNECTIONS=1024
# Desktop Application
DESKTOP_VNC_WEB_PORT=6080
DESKTOP_VNC_PORT=5901
DESKTOP_APP_DOMAIN=localhost
# ===================================================================
# Security Configuration
# ===================================================================
# JWT Configuration
JWT_ISSUER=meldestelle-auth-server
JWT_AUDIENCE=meldestelle-services
# Note: JWT_SECRET is now managed via Docker secrets
# Generate with: openssl rand -hex 32
# Keycloak Configuration
KEYCLOAK_REALM=meldestelle
KEYCLOAK_CLIENT_ID=api-gateway
# Note: All passwords and secrets are now managed via Docker secrets
# Run: ./docker/secrets/setup-secrets.sh to generate secure secrets
# ===================================================================
# Data Storage Configuration
# ===================================================================
# Data directory for persistent volumes
# Default: ./data (relative to project root)
# Production: /var/lib/meldestelle or dedicated mount point
DATA_PATH=./data
# Volume configuration
# These directories will be created under DATA_PATH:
# - postgres/ (PostgreSQL data)
# - redis/ (Redis data)
# - prometheus/ (Prometheus metrics)
# - grafana/ (Grafana dashboards)
# - keycloak/ (Keycloak data)
# - consul/ (Consul data)
# - monitoring/ (Custom monitoring data)
# - desktop-app/ (Desktop application data)
# ===================================================================
# Development and Testing
# ===================================================================
# Enable debug mode for Java applications
DEBUG=false
# Enable Wasm compilation for client applications
ENABLE_WASM=false
# ===================================================================
# Production Deployment Settings
# ===================================================================
# Container resource limits (configured in docker-compose files)
# These are documented here for reference:
# Infrastructure Services Resource Limits:
# - postgres: 2 CPU, 2GB RAM (reserved: 0.5 CPU, 512MB RAM)
# - redis: 1 CPU, 1GB RAM (reserved: 0.25 CPU, 256MB RAM)
# - keycloak: 2 CPU, 2GB RAM (reserved: 0.5 CPU, 1GB RAM)
# - consul: 1 CPU, 512MB RAM (reserved: 0.25 CPU, 128MB RAM)
# - kafka: 2 CPU, 2GB RAM (reserved: 0.5 CPU, 512MB RAM)
# - zookeeper: 1 CPU, 1GB RAM (reserved: 0.25 CPU, 256MB RAM)
# - prometheus: 1 CPU, 2GB RAM (reserved: 0.25 CPU, 512MB RAM)
# - grafana: 1 CPU, 1GB RAM (reserved: 0.25 CPU, 256MB RAM)
# - api-gateway: 2 CPU, 2GB RAM (reserved: 0.5 CPU, 1GB RAM)
# Microservices Resource Limits:
# - ping-service: 1 CPU, 1GB RAM (reserved: 0.25 CPU, 256MB RAM)
# - members-service: 2 CPU, 2GB RAM (reserved: 0.5 CPU, 512MB RAM)
# - horses-service: 2 CPU, 2GB RAM (reserved: 0.5 CPU, 512MB RAM)
# - events-service: 2 CPU, 2GB RAM (reserved: 0.5 CPU, 512MB RAM)
# - masterdata-service: 1.5 CPU, 1.5GB RAM (reserved: 0.5 CPU, 512MB RAM)
# - auth-server: 1.5 CPU, 1.5GB RAM (reserved: 0.5 CPU, 512MB RAM)
# Client Applications Resource Limits:
# - web-app: 1 CPU, 512MB RAM (reserved: 0.25 CPU, 128MB RAM)
# - desktop-app: 2 CPU, 2GB RAM (reserved: 0.5 CPU, 512MB RAM)
# - monitoring-server: 1 CPU, 1GB RAM (reserved: 0.25 CPU, 256MB RAM)
# ===================================================================
# Security Notes
# ===================================================================
# 1. All passwords and secrets are managed via Docker secrets
# 2. Run ./docker/secrets/setup-secrets.sh to generate secure credentials
# 3. Containers run as non-root users where possible
# 4. Security options: no-new-privileges enabled for all services
# 5. Networks are isolated with custom subnet (172.20.0.0/16)
# 6. Volumes have proper permissions and are mounted read-only where appropriate
# 7. Health checks are configured for all services
# 8. Resource limits prevent resource exhaustion attacks
# ===================================================================
# Usage Instructions
# ===================================================================
# 1. Copy this file: cp .env.template .env
# 2. Customize values in .env for your environment
# 3. Generate secrets: ./docker/secrets/setup-secrets.sh --all
# 4. Create data directories: mkdir -p ./data/{postgres,redis,prometheus,grafana,keycloak,consul}
# 5. Deploy infrastructure: docker-compose -f docker-compose.yml.optimized up -d
# 6. Deploy services: docker-compose -f docker-compose.yml.optimized -f docker-compose.services.yml.optimized up -d
# 7. Deploy clients: docker-compose -f docker-compose.yml.optimized -f docker-compose.services.yml.optimized -f docker-compose.clients.yml.optimized up -d
# ===================================================================
# Monitoring and Logging
# ===================================================================
# Access URLs (when running with default ports):
# - Grafana Dashboard: http://localhost:3000 (admin credentials in secrets)
# - Prometheus Metrics: http://localhost:9090
# - Consul UI: http://localhost:8500
# - Keycloak Admin: http://localhost:8180/admin (admin credentials in secrets)
# - API Gateway: http://localhost:8081
# - Web Application: http://localhost:4000
# - Desktop VNC: http://localhost:6080
# Log locations (inside containers):
# - Application logs: /app/logs/
# - Nginx logs: /var/log/nginx/
# - System logs: journalctl -u docker
+1 -1
View File
@@ -9,7 +9,7 @@
# Build Configuration # Build Configuration
# =================================================================== # ===================================================================
# Docker image versions # Docker image versions
DOCKER_GRADLE_VERSION=9.0.0 DOCKER_GRADLE_VERSION=9.0.1
DOCKER_JAVA_VERSION=21 DOCKER_JAVA_VERSION=21
DOCKER_KEYCLOAK_VERSION=26.4.0 DOCKER_KEYCLOAK_VERSION=26.4.0
DOCKER_PROMETHEUS_VERSION=v2.54.1 DOCKER_PROMETHEUS_VERSION=v2.54.1
@@ -5,9 +5,9 @@
guideline_type: "technology" guideline_type: "technology"
scope: "docker-development" scope: "docker-development"
audience: ["developers", "ai-assistants"] audience: ["developers", "ai-assistants"]
last_updated: "2025-09-15" last_updated: "2025-11-11"
dependencies: ["docker-overview.md", "docker-architecture.md"] dependencies: ["docker-overview.md", "docker-architecture.md"]
related_files: ["docker-compose.yml", "docker-compose.override.yml", "Makefile"] related_files: ["docker-compose.yml", "docker-compose.services.yml", "docker-compose.clients.yml", "Makefile"]
ai_context: "Entwicklungs-Workflow, Debugging und lokale Entwicklungsumgebung mit Docker" ai_context: "Entwicklungs-Workflow, Debugging und lokale Entwicklungsumgebung mit Docker"
--- ---
@@ -19,168 +19,726 @@ ai_context: "Entwicklungs-Workflow, Debugging und lokale Entwicklungsumgebung mi
> Für Details zur Container-Architektur siehe [docker-architecture](docker-architecture.md). > Für Details zur Container-Architektur siehe [docker-architecture](docker-architecture.md).
> Für Production-Deployment siehe [docker-production](docker-production.md). > Für Production-Deployment siehe [docker-production](docker-production.md).
### Schnellstart-Befehle ## 🚀 Schnellstart
### Komplette Hilfe anzeigen
```bash ```bash
# 🚀 Komplettes Development-Setup make help # Zeigt alle verfügbaren Befehle mit Beschreibungen
make dev-up # Startet alle Development-Services
make dev-down # Stoppt alle Services
make dev-logs # Zeigt Logs aller Services
make dev-restart # Neustart aller Services
# 🔧 Service-spezifische Befehle
make service-build SERVICE=ping-service # Service neu bauen
make service-logs SERVICE=ping-service # Service-Logs anzeigen
make service-restart SERVICE=ping-service # Service neustarten
``` ```
> **🤖 AI-Assistant Hinweis:** ### Wichtigste Befehle für den Einstieg
> Für Development verwende die Makefile-Befehle oder direkt docker-compose:
> - **Alles starten:** `make dev-up` oder `docker-compose up -d`
> - **Logs ansehen:** `make dev-logs` oder `docker-compose logs -f`
> - **Service debuggen:** `docker-compose exec <service> sh`
**Makefile-Beispiel:**
```makefile
# Development commands
.PHONY: dev-up dev-down dev-logs dev-restart
dev-up:
docker-compose -f docker-compose.yml -f docker-compose.services.yml up -d
@echo "🚀 Development environment started"
@echo "📊 Grafana: http://localhost:3000 (admin/admin)"
@echo "🔍 Prometheus: http://localhost:9090"
@echo "🚪 API Gateway: http://localhost:8080"
dev-down:
docker-compose -f docker-compose.yml -f docker-compose.services.yml down
dev-logs:
docker-compose -f docker-compose.yml -f docker-compose.services.yml logs -f
dev-restart:
$(MAKE) dev-down
$(MAKE) dev-up
# Service-specific commands
service-build:
@test -n "$(SERVICE)" || (echo "❌ SERVICE parameter required"; exit 1)
docker-compose -f docker-compose.yml -f docker-compose.services.yml build $(SERVICE)
service-logs:
@test -n "$(SERVICE)" || (echo "❌ SERVICE parameter required"; exit 1)
docker-compose logs -f $(SERVICE)
service-restart:
@test -n "$(SERVICE)" || (echo "❌ SERVICE parameter required"; exit 1)
docker-compose -f docker-compose.yml -f docker-compose.services.yml restart $(SERVICE)
```
### Hot-Reload Development
**docker-compose.override.yml** für optimierte Entwicklung:
```yaml
# Development overrides für Hot-Reload
version: '3.8'
services:
web-client:
volumes:
- ./client/web-app/src:/app/src:ro
- ./client/common-ui/src:/app/common-ui/src:ro
environment:
- NODE_ENV=development
command: npm run dev
ping-service:
environment:
- DEBUG=true
- SPRING_DEVTOOLS_RESTART_ENABLED=true
ports:
- "5005:5005" # Debug-Port
volumes:
- ./temp/ping-service/src:/workspace/src:ro
```
### Debugging von Services
```bash ```bash
# Service im Debug-Modus starten # Komplettes System starten
docker-compose -f docker-compose.yml up -d ping-service make full-up # Infrastruktur + Services + Clients
docker-compose exec ping-service sh
# Logs in Echtzeit verfolgen # Nur Backend starten
docker-compose logs -f ping-service api-gateway make services-up # Infrastruktur + Microservices
# Health-Check Status prüfen # Nur Entwicklungsumgebung
curl -s http://localhost:8082/actuator/health | jq make dev-up # Infrastruktur only
curl -s http://localhost:8080/actuator/health | jq
# System-Health prüfen
make health-check # Prüft alle Infrastruktur-Services
# Logs anzeigen
make full-logs # Alle Logs in Echtzeit
``` ```
## 📚 Vollständige Makefile-Referenz
### Development Workflow Commands
Befehle für die lokale Entwicklungsumgebung:
```bash
make dev-up # Startet Entwicklungsumgebung (docker-compose.yml)
make dev-down # Stoppt Entwicklungsumgebung
make dev-restart # Neustart Entwicklungsumgebung
make dev-logs # Zeigt alle Development-Logs
make dev-info # Zeigt Entwicklungsumgebungs-Informationen
```
**Verwendung:**
```bash
# Infrastruktur starten (Postgres, Redis, Keycloak, Consul)
make dev-up
# Nach dem Start werden angezeigt:
# - Consul UI: http://localhost:8500
# - Keycloak: http://localhost:8180 (admin/admin)
# - PostgreSQL: localhost:5432
# - Redis: localhost:6379
```
### Layer-spezifische Commands
Das System ist in drei Schichten organisiert:
#### 1. Infrastructure Layer
```bash
make infrastructure-up # Startet nur Infrastruktur-Services
make infrastructure-down # Stoppt Infrastruktur-Services
make infrastructure-logs # Zeigt Infrastruktur-Logs
```
**Services:** PostgreSQL, Redis, Keycloak, Consul, Kafka, Zookeeper, Prometheus, Grafana
#### 2. Services Layer (Backend)
```bash
make services-up # Startet Infrastruktur + Microservices
make services-down # Stoppt Services
make services-restart # Neustart Services
make services-logs # Zeigt Service-Logs
```
**Services:** API Gateway + alle Microservices (Ping, Members, Horses, Events, Masterdata, Auth, Monitoring)
**URLs nach Start:**
- Gateway: http://localhost:8081
- Ping Service: http://localhost:8082
- Members Service: http://localhost:8083
- Horses Service: http://localhost:8084
- Events Service: http://localhost:8085
- Master Service: http://localhost:8086
#### 3. Clients Layer (Frontend)
```bash
make clients-up # Startet Infrastruktur + Client-Apps
make clients-down # Stoppt Clients
make clients-restart # Neustart Clients
make clients-logs # Zeigt Client-Logs
```
**Clients:** Web-App, Auth-Server, Monitoring-Server
**URLs nach Start:**
- Web App: http://localhost:4000
- Auth Server: http://localhost:8087
- Monitoring: http://localhost:8088
### Full System Commands
Befehle für das komplette System (alle Layer):
```bash
make full-up # Startet ALLES (Infrastructure + Services + Clients)
make full-down # Stoppt komplettes System
make full-restart # Neustart komplettes System
make full-logs # Zeigt alle System-Logs
```
**Nach `make full-up` verfügbare Services:**
```
🌐 Frontend & APIs:
Web App: http://localhost:4000
API Gateway: http://localhost:8081
🔧 Infrastructure:
PostgresQL: localhost:5432
Redis: localhost:6379
Keycloak: http://localhost:8180
Consul: http://localhost:8500
Prometheus: http://localhost:9090
Grafana: http://localhost:3000
⚙️ Microservices:
Ping Service: http://localhost:8082
Members Service: http://localhost:8083
Horses Service: http://localhost:8084
Events Service: http://localhost:8085
Master Service: http://localhost:8086
Auth Server: http://localhost:8087
Monitoring: http://localhost:8088
```
### Build Commands
Befehle zum Bauen von Docker-Images:
```bash
make build # Baut alle Custom-Images
make build-service SERVICE=ping-service # Baut einzelnen Service
make build-client CLIENT=web-app # Baut einzelnen Client
```
**Beispiele:**
```bash
# Einzelnen Service neu bauen (ohne Cache)
make build-service SERVICE=api-gateway
# Web-App neu bauen
make build-client CLIENT=web-app
# Alle Images neu bauen
make build
```
### Test Commands
Befehle für Testing:
```bash
make test # Führt Integration-Tests aus
make test-e2e # Führt End-to-End-Tests aus
```
**Details:**
```bash
# Integration-Tests
# - Startet automatisch Infrastruktur
# - Führt Gradle-Tests aus
# - Stoppt Infrastruktur nach Tests
make test
# E2E-Tests
# - Startet komplette Entwicklungsumgebung
# - Führt Client-Tests aus
# - Stoppt Umgebung nach Tests
make test-e2e
```
### Environment Management Commands
Befehle für Environment-Konfiguration:
```bash
make env-setup # Zeigt Environment-Setup-Anweisungen
make env-dev # Wechselt zu Development-Environment
make env-prod # Wechselt zu Production-Environment
make env-staging # Wechselt zu Staging-Environment
make env-test # Wechselt zu Test-Environment
make validate # Validiert Docker Compose Konfiguration
make env-template # Erstellt .env Template-Datei
```
**Verwendung:**
```bash
# Entwicklungsumgebung aktivieren
make env-dev
# Validierung durchführen
make validate
# Neue .env-Template erstellen
make env-template
```
### SSoT (Single Source of Truth) Commands
Befehle für Docker-Versionsverwaltung:
```bash
make versions-show # Zeigt zentrale Versionen (docker/versions.toml)
make versions-update key=gradle value=9.1.0 # Aktualisiert eine Version
make docker-sync # Synchronisiert versions.toml -> build-args/*.env
make docker-compose-gen ENV=development # Generiert Docker Compose Files
make docker-validate # Validiert Docker SSoT Konsistenz
make hooks-install # Installiert Pre-Commit SSoT Guard Hook
```
**Workflow für Versions-Updates:**
```bash
# 1. Version in versions.toml aktualisieren
make versions-update key=gradle value=9.1.0
# 2. Build-Args synchronisieren
make docker-sync
# 3. Compose-Files neu generieren
make docker-compose-gen ENV=development
# 4. Konsistenz validieren
make docker-validate
```
**Verfügbare Versions-Keys:**
- `gradle` - Gradle-Version
- `java` - Java-Version
- `node` - Node.js-Version
- `nginx` - Nginx-Version
- `alpine` - Alpine Linux-Version
- `prometheus` - Prometheus-Version
- `grafana` - Grafana-Version
- `keycloak` - Keycloak-Version
- `app-version` - Anwendungsversion
- `spring-profiles-default` - Spring Default-Profile
- `spring-profiles-docker` - Spring Docker-Profile
### Production Commands
Befehle für Production-Deployment:
```bash
make prod-up # Startet Production-Environment
make prod-down # Stoppt Production-Environment
make prod-restart # Neustart Production-Environment
make prod-logs # Zeigt Production-Logs
```
**⚠️ Hinweis:** Stelle sicher, dass `.env` korrekt konfiguriert ist mit `make env-prod`
### Monitoring & Debugging Commands
Befehle für System-Monitoring und Debugging:
```bash
make status # Zeigt Container-Status
make health-check # Prüft Health aller Infrastruktur-Services
make logs SERVICE=postgres # Zeigt Logs eines spezifischen Services
make shell SERVICE=postgres # Öffnet Shell in Container
```
**Beispiele:**
```bash
# Status aller Container
make status
# Health-Check durchführen
make health-check
# Output:
# PostgreSQL: ✅ Ready
# Redis: ✅ PONG
# Consul: ✅ Leader elected
# Keycloak: ✅ Ready
# Logs von PostgreSQL anzeigen
make logs SERVICE=postgres
# Shell im Postgres-Container öffnen
make shell SERVICE=postgres
```
### Cleanup Commands
Befehle zum Aufräumen:
```bash
make clean # Aufräumen Docker-Ressourcen (Prune)
make clean-all # Vollständiges Cleanup (inkl. Images und Volumes)
```
**⚠️ Warnung:** `make clean-all` löscht auch Volumes und Images!
### Development Tools Commands
```bash
make dev-tools-up # Info: Dev-Tools wurden entfernt (verwende lokale Tools)
make dev-tools-down # Info: Keine Dev-Tool-Container zum Stoppen
```
**Empfehlung:** Verwende lokale Tools wie pgAdmin, TablePlus, DBeaver, RedisInsight
## 🎯 AI-Assistenten: Development-Schnellreferenz ## 🎯 AI-Assistenten: Development-Schnellreferenz
### Häufige Entwicklungsaufgaben ### Häufigste Workflows
| Aufgabe | Befehl | Beschreibung | #### 1. Lokale Entwicklung starten
|-------------------|-----------------------------------------|-------------------------------|
| Umgebung starten | `make dev-up` | Alle Services für Development |
| Service debuggen | `docker-compose exec <service> sh` | Shell im Container |
| Logs verfolgen | `docker-compose logs -f <service>` | Live-Logs anzeigen |
| Service neu bauen | `make service-build SERVICE=<name>` | Einzelnen Service rebuilden |
| Health-Check | `curl localhost:<port>/actuator/health` | Service-Status prüfen |
### Development-URLs ```bash
# Variante A: Nur Infrastruktur
make dev-up
./gradlew :members:members-service:bootRun
- **Grafana:** http://localhost:3000 (admin/admin) # Variante B: Komplettes Backend
- **Prometheus:** http://localhost:9090 make services-up
- **API Gateway:** http://localhost:8080
- **Consul:** http://localhost:8500 # Variante C: Alles inkl. Frontend
- **Keycloak:** http://localhost:8180 make full-up
```
#### 2. Service neu bauen nach Code-Änderungen
```bash
# Service stoppen
docker compose down api-gateway
# Service neu bauen
make build-service SERVICE=api-gateway
# Service starten
make services-up
```
#### 3. Debugging eines Services
```bash
# Logs in Echtzeit
make logs SERVICE=ping-service
# Shell im Container öffnen
make shell SERVICE=ping-service
# Health-Status prüfen
curl -s http://localhost:8082/actuator/health | jq
```
#### 4. Docker-Versionen aktualisieren
```bash
# Gradle-Version ändern
make versions-update key=gradle value=9.1.0
# Änderungen synchronisieren
make docker-sync
make docker-compose-gen
make docker-validate
# Git-Status prüfen (sollte generierte Files zeigen)
git status
```
#### 5. Tests ausführen
```bash
# Integration-Tests (automatische Infrastruktur)
make test
# E2E-Tests (automatische Full-Environment)
make test-e2e
# Einzelner Test via Gradle
./gradlew :members:members-service:test
```
### Development-URLs Übersicht
| Service | URL | Credentials |
|-----------------|-------------------------------|-------------------|
| Web App | http://localhost:4000 | - |
| API Gateway | http://localhost:8081 | - |
| Ping Service | http://localhost:8082 | - |
| Members Service | http://localhost:8083 | - |
| Horses Service | http://localhost:8084 | - |
| Events Service | http://localhost:8085 | - |
| Master Service | http://localhost:8086 | - |
| Auth Server | http://localhost:8087 | - |
| Monitoring | http://localhost:8088 | - |
| Keycloak Admin | http://localhost:8180 | admin/admin |
| Consul UI | http://localhost:8500 | - |
| Prometheus | http://localhost:9090 | - |
| Grafana | http://localhost:3000 | admin/admin |
| PostgreSQL | localhost:5432 | meldestelle/*** |
| Redis | localhost:6379 | - |
### Health-Check Endpoints
```bash
# API Gateway
curl -s http://localhost:8081/actuator/health | jq
# Ping Service
curl -s http://localhost:8082/actuator/health | jq
# Members Service
curl -s http://localhost:8083/actuator/health | jq
# Keycloak
curl -s http://localhost:8180/health/ready | jq
# Consul
curl -s http://localhost:8500/v1/status/leader
```
### Debug-Ports ### Debug-Ports
- **Spring-Services:** 5005 (Standard Java Debug) **Spring Boot Services:**
- **Web-App:** Hot-Reload über Volume-Mapping - Debug-Port: 5005 (Standard Java Debug Protocol)
- **Client-Apps:** Port 4000 (Web), 5901 (Desktop VNC) - Konfiguration in docker-compose.services.yml
**Client-Apps:**
- Web-App: Hot-Reload über Volume-Mapping
- Desktop-App: VNC Port 5901, VNC Web Port 6080
### Troubleshooting Development ### Troubleshooting Development
#### Container startet nicht #### Container startet nicht
```bash ```bash
# Container-Status prüfen # 1. Status prüfen
docker-compose ps make status
# Container-Logs anzeigen # 2. Logs anzeigen
docker-compose logs <service-name> make logs SERVICE=<service-name>
# Container neu starten # 3. Container neu starten
docker-compose restart <service-name> docker compose restart <service-name>
# Image neu bauen # 4. Image neu bauen (ohne Cache)
docker-compose build --no-cache <service-name> make build-service SERVICE=<service-name>
docker compose up -d <service-name>
``` ```
#### Port-Konflikte #### Port-Konflikte
```bash ```bash
# Ports prüfen # Ports prüfen
lsof -i :<port>
# oder
netstat -tulpn | grep :<port> netstat -tulpn | grep :<port>
# Service mit anderem Port starten # Konfigurierten Port in .env ändern
docker-compose -f docker-compose.yml -f docker-compose.override.yml up -d # z.B. API_GATEWAY_PORT=8081 -> API_GATEWAY_PORT=8091
# Services neu starten
make services-restart
```
#### Health-Check schlägt fehl
```bash
# 1. Service-Status prüfen
make status
# 2. Service-Logs prüfen
make logs SERVICE=<service-name>
# 3. Manueller Health-Check
curl -v http://localhost:<port>/actuator/health
# 4. Container-Netzwerk prüfen
docker network inspect meldestelle-network
# 5. Service neu starten
docker compose restart <service-name>
``` ```
#### Volume-Probleme #### Volume-Probleme
```bash ```bash
# Volumes prüfen # Volumes anzeigen
docker volume ls docker volume ls | grep meldestelle
# Volume-Inhalt anzeigen # Volume-Inhalt prüfen
docker-compose exec <service> ls -la /path/to/volume make shell SERVICE=postgres
ls -la /var/lib/postgresql/data
# Volume entfernen (⚠️ Daten gehen verloren!)
docker volume rm meldestelle_postgres-data
# Volumes neu erstellen
make full-down
make full-up
```
#### Datenbankverbindung fehlgeschlagen
```bash
# 1. PostgreSQL-Status prüfen
make health-check
# 2. PostgreSQL-Logs prüfen
make logs SERVICE=postgres
# 3. Verbindung testen (aus anderem Container)
docker compose exec api-gateway sh
apk add postgresql-client
psql -h postgres -U meldestelle -d meldestelle
# 4. Secrets prüfen (falls verwendet)
ls -la ./docker/secrets/
```
#### Gradle-Build schlägt fehl im Container
```bash
# 1. Gradle-Version in versions.toml prüfen
cat docker/versions.toml | grep gradle
# 2. Verfügbare Gradle-Images prüfen
docker search gradle | grep alpine
# 3. Build-Logs detailliert anzeigen
make logs SERVICE=<service-name>
# 4. Manuell im Container debuggen
make shell SERVICE=<service-name>
./gradlew --version
./gradlew dependencies
```
#### Service ist erreichbar, antwortet aber nicht
```bash
# 1. Service-Logs in Echtzeit
make logs SERVICE=<service-name>
# 2. JVM-Status prüfen (bei Java-Services)
make shell SERVICE=<service-name>
ps aux | grep java
# 3. Speicher/CPU prüfen
docker stats <container-name>
# 4. Netzwerk-Verbindung testen
docker compose exec <service> sh
apk add curl
curl -v http://api-gateway:8081/actuator/health
```
## 🤖 AI-Assistant Best Practices
### Für Code-Assistenten
1. **Verwende immer `make help`** um verfügbare Befehle zu sehen
2. **Befehlsnamen korrekt verwenden:**
-`make build-service SERVICE=ping-service`
-`make service-build SERVICE=ping-service` (veraltet)
3. **Port-Angaben beachten:**
- API Gateway: Port 8081 (nicht 8080!)
- Alle Ports in `.env` oder `docker-compose*.yml` definiert
4. **SSoT-Workflow einhalten:**
- Versionen nur in `docker/versions.toml` ändern
- `make docker-sync` nach Änderungen
- `make docker-validate` vor Commits
### Für Entwickler-Support
1. **Troubleshooting-Reihenfolge:**
- `make status` → Container-Status
- `make health-check` → Service-Health
- `make logs SERVICE=<name>` → Logs prüfen
- `make shell SERVICE=<name>` → Interactive Debugging
2. **Häufige Fehlerquellen:**
- Fehlende `.env` Datei → `make env-dev`
- Port-Konflikte → `lsof -i :<port>`
- Veraltete Images → `make build`
- Volume-Berechtigungen → `make clean-all` (⚠️ Daten-Verlust!)
3. **Performance-Optimierung:**
- Nur benötigte Layer starten (infrastructure/services/clients)
- Docker BuildKit aktivieren: `export DOCKER_BUILDKIT=1`
- Gradle-Cache nutzen (bereits in Dockerfiles konfiguriert)
## 📦 Docker Compose Dateien
Das Projekt verwendet mehrere Compose-Files:
- **docker-compose.yml** - Infrastruktur-Layer (Postgres, Redis, Keycloak, Consul, etc.)
- **docker-compose.services.yml** - Services-Layer (API Gateway, Microservices)
- **docker-compose.clients.yml** - Clients-Layer (Web-App, Desktop-App)
**Kombinationen:**
```bash
# Nur Infrastruktur
docker compose -f docker-compose.yml up -d
# Infrastruktur + Services
docker compose -f docker-compose.yml -f docker-compose.services.yml up -d
# Infrastruktur + Clients
docker compose -f docker-compose.yml -f docker-compose.clients.yml up -d
# Alles
docker compose -f docker-compose.yml -f docker-compose.services.yml -f docker-compose.clients.yml up -d
# ⚠️ Tipp: Verwende stattdessen die Makefile-Befehle!
```
## 🔄 Typische Entwicklungs-Workflows
### Workflow 1: Neues Feature entwickeln
```bash
# 1. Frische Umgebung starten
make full-down
make dev-up
# 2. Feature in IDE entwickeln
# (Service läuft lokal via Gradle, nicht in Docker)
# 3. Tests lokal ausführen
./gradlew :members:members-service:test
# 4. Service als Container testen
make build-service SERVICE=members-service
make services-up
# 5. Integration-Tests
make test
# 6. Aufräumen
make dev-down
```
### Workflow 2: Bug-Fixing
```bash
# 1. System starten
make full-up
# 2. Logs beobachten
make logs SERVICE=<betroffener-service>
# 3. Shell im Container öffnen (falls nötig)
make shell SERVICE=<betroffener-service>
# 4. Fix implementieren und Service neu bauen
make build-service SERVICE=<betroffener-service>
docker compose restart <betroffener-service>
# 5. Fix verifizieren
curl http://localhost:<port>/actuator/health
make test
```
### Workflow 3: Docker-Version aktualisieren
```bash
# 1. Aktuelle Versionen anzeigen
make versions-show
# 2. Version aktualisieren (z.B. Java)
make versions-update key=java value=22
# 3. Build-Args synchronisieren
make docker-sync
# 4. Compose-Files neu generieren
make docker-compose-gen ENV=development
# 5. Konsistenz validieren
make docker-validate
# 6. Testen
make clean-all # ⚠️ Entfernt Volumes!
make full-up
make health-check
```
### Workflow 4: Kompletter System-Reset
```bash
# 1. Alles stoppen
make full-down
# 2. Alle Docker-Ressourcen entfernen
make clean-all # ⚠️ Entfernt auch Volumes und Images!
# 3. Images neu bauen
make build
# 4. System neu starten
make full-up
# 5. Health-Check
make health-check
# 6. Logs prüfen
make full-logs
``` ```
--- ---
@@ -189,5 +747,10 @@ docker-compose exec <service> ls -la /path/to/volume
- [Docker-Overview](./docker-overview.md) - Grundlagen und Philosophie - [Docker-Overview](./docker-overview.md) - Grundlagen und Philosophie
- [Docker-Architecture](./docker-architecture.md) - Container-Services und Struktur - [Docker-Architecture](./docker-architecture.md) - Container-Services und Struktur
- [Docker-Production](./docker-production.md) - Production-Deployment - [Docker-Production](./docker-production.md) - Production-Deployment
- [docker-monitoring](./docker-monitoring.md) - Observability - [Docker-Monitoring](./docker-monitoring.md) - Observability
- [docker-troubleshooting](./docker-troubleshooting.md) - Problemlösung - [Docker-Troubleshooting](./docker-troubleshooting.md) - Problemlösung
---
**Letzte Aktualisierung:** 2025-11-11
**Version:** 2.0.0 - Vollständige Makefile-Referenz mit allen 50+ Befehlen
@@ -238,7 +238,7 @@ scrape_configs:
- job_name: 'spring-boot' - job_name: 'spring-boot'
metrics_path: '/actuator/prometheus' metrics_path: '/actuator/prometheus'
static_configs: static_configs:
- targets: ['api-gateway:8080', 'ping-service:8082'] - targets: ['api-gateway:8081', 'ping-service:8082']
scrape_interval: 10s scrape_interval: 10s
- job_name: 'infrastructure' - job_name: 'infrastructure'
@@ -70,7 +70,7 @@ export KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
```nginx ```nginx
upstream api_backend { upstream api_backend {
server api-gateway:8080; server api-gateway:8081;
keepalive 32; keepalive 32;
} }
+54 -43
View File
@@ -3,13 +3,21 @@
# Optimierte Befehle für containerised Entwicklung-Workflows # Optimierte Befehle für containerised Entwicklung-Workflows
# =================================================================== # ===================================================================
.PHONY: help dev-up dev-down dev-restart dev-logs build clean test # ===================================================================
# PHONY Target Declarations
# ===================================================================
.PHONY: help
.PHONY: dev-up dev-down dev-restart dev-logs dev-info dev-tools-up dev-tools-down
.PHONY: infrastructure-up infrastructure-down infrastructure-logs
.PHONY: services-up services-down services-restart services-logs .PHONY: services-up services-down services-restart services-logs
.PHONY: clients-up clients-down clients-restart clients-logs .PHONY: clients-up clients-down clients-restart clients-logs
.PHONY: prod-up prod-down prod-restart prod-logs
.PHONY: infrastructure-up infrastructure-down infrastructure-logs
.PHONY: full-up full-down full-restart full-logs .PHONY: full-up full-down full-restart full-logs
.PHONY: dev-tools-up dev-tools-down status health-check logs shell env-setup env-dev env-prod env-staging env-test dev-info clean-all build-service build-client .PHONY: prod-up prod-down prod-restart prod-logs
.PHONY: env-setup env-dev env-prod env-staging env-test validate env-template
.PHONY: build build-service build-client clean clean-all
.PHONY: test test-e2e
.PHONY: status health-check logs shell
.PHONY: versions-show versions-update docker-sync docker-validate docker-compose-gen hooks-install
.ONESHELL: .ONESHELL:
@@ -109,11 +117,42 @@ clients-logs: ## Show client application logs
full-up: ## Start complete system (infrastructure + services + clients) full-up: ## Start complete system (infrastructure + services + clients)
@echo "🚀 Starting complete Meldestelle system..." @echo "🚀 Starting complete Meldestelle system..."
$(COMPOSE) -f docker-compose.yml -f docker-compose.services.yml -f docker-compose.clients.yml up -d $(COMPOSE) -f docker-compose.yml -f docker-compose.services.yml -f docker-compose.clients.yml up -d
@echo "✅ Complete system started"
@echo ""
@echo "🌐 Frontend & APIs:"
@echo " Web App: http://localhost:4000"
@echo " API Gateway: http://localhost:8081"
@echo ""
@echo "🔧 Infrastructure:"
@echo " PostgresQL: localhost:5432"
@echo " Redis: localhost:6379"
@echo " Keycloak: http://localhost:8180"
@echo " Consul: http://localhost:8500"
@echo " Prometheus: http://localhost:9090"
@echo " Grafana: http://localhost:3000"
@echo ""
@echo "⚙️ Microservices:"
@echo " Ping Service: http://localhost:8082"
@echo " Members Service: http://localhost:8083"
@echo " Horses Service: http://localhost:8084"
@echo " Events Service: http://localhost:8085"
@echo " Master Service: http://localhost:8086"
@echo " Auth Server: http://localhost:8087"
@echo " Monitoring: http://localhost:8088"
full-down: ## Stop complete system
$(COMPOSE) -f docker-compose.yml -f docker-compose.services.yml -f docker-compose.clients.yml down
full-restart: ## Restart complete system
@$(MAKE) full-down
@$(MAKE) full-up
full-logs: ## Show all system logs
$(COMPOSE) -f docker-compose.yml -f docker-compose.services.yml -f docker-compose.clients.yml logs -f
# =================================================================== # ===================================================================
# SSoT Developer UX (optional helpers) # SSoT Developer UX (optional helpers)
# =================================================================== # ===================================================================
.PHONY: versions-show versions-update docker-sync docker-validate docker-compose-gen hooks-install
# Show current centralized versions from docker/versions.toml # Show current centralized versions from docker/versions.toml
versions-show: ## Show centralized versions (docker/versions.toml) versions-show: ## Show centralized versions (docker/versions.toml)
@@ -148,38 +187,6 @@ hooks-install: ## Install pre-commit SSoT guard hook into .git/hooks/pre-commit
@cp scripts/git-hooks/pre-commit-ssot .git/hooks/pre-commit @cp scripts/git-hooks/pre-commit-ssot .git/hooks/pre-commit
@chmod +x .git/hooks/pre-commit @chmod +x .git/hooks/pre-commit
@echo "✅ Installed .git/hooks/pre-commit (SSoT guard)" @echo "✅ Installed .git/hooks/pre-commit (SSoT guard)"
@echo "✅ Complete system started"
@echo ""
@echo "🌐 Frontend & APIs:"
@echo " Web App: http://localhost:4000"
@echo " API Gateway: http://localhost:8081"
@echo ""
@echo "🔧 Infrastructure:"
@echo " PostgresQL: localhost:5432"
@echo " Redis: localhost:6379"
@echo " Keycloak: http://localhost:8180"
@echo " Consul: http://localhost:8500"
@echo " Prometheus: http://localhost:9090"
@echo " Grafana: http://localhost:3000"
@echo ""
@echo "⚙️ Microservices:"
@echo " Ping Service: http://localhost:8082"
@echo " Members Service: http://localhost:8083"
@echo " Horses Service: http://localhost:8084"
@echo " Events Service: http://localhost:8085"
@echo " Master Service: http://localhost:8086"
@echo " Auth Server: http://localhost:8087"
@echo " Monitoring: http://localhost:8088"
full-down: ## Stop complete system
$(COMPOSE) -f docker-compose.yml -f docker-compose.services.yml -f docker-compose.clients.yml down
full-restart: ## Restart complete system
@$(MAKE) full-down
@$(MAKE) full-up
full-logs: ## Show all system logs
$(COMPOSE) -f docker-compose.yml -f docker-compose.services.yml -f docker-compose.clients.yml logs -f
# =================================================================== # ===================================================================
# Environment Configuration Commands # Environment Configuration Commands
@@ -247,8 +254,8 @@ prod-restart: ## Restart production environment
@$(MAKE) prod-down @$(MAKE) prod-down
@$(MAKE) prod-up @$(MAKE) prod-up
prod-logs: ## Show production logs (simplified) prod-logs: ## Show production logs
$(COMPOSE) -f docker-compose.yml logs -f $(COMPOSE) -f docker-compose.yml -f docker-compose.services.yml logs -f
# =================================================================== # ===================================================================
# Development Tools # Development Tools
@@ -337,19 +344,23 @@ test: ## Run integration tests
@echo "🧪 Running integration tests..." @echo "🧪 Running integration tests..."
@$(MAKE) infrastructure-up @$(MAKE) infrastructure-up
@echo "⏳ Waiting for services to be ready..." @echo "⏳ Waiting for services to be ready..."
@sleep 30 @sleep 10
@$(MAKE) health-check || true
@echo "✅ Running test suite..." @echo "✅ Running test suite..."
./gradlew test @./gradlew test || (echo "❌ Tests failed"; $(MAKE) infrastructure-down; exit 1)
@$(MAKE) infrastructure-down @$(MAKE) infrastructure-down
@echo "✅ Integration tests completed successfully"
test-e2e: ## Run end-to-end tests with full environment test-e2e: ## Run end-to-end tests with full environment
@echo "🧪 Running end-to-end tests..." @echo "🧪 Running end-to-end tests..."
@$(MAKE) dev-up @$(MAKE) dev-up
@echo "⏳ Waiting for full environment to be ready..." @echo "⏳ Waiting for full environment to be ready..."
@sleep 60 @sleep 15
@$(MAKE) health-check || true
@echo "✅ Running e2e test suite..." @echo "✅ Running e2e test suite..."
./gradlew :client:web-app:jsTest @./gradlew :client:web-app:jsTest || (echo "❌ E2E tests failed"; $(MAKE) dev-down; exit 1)
@$(MAKE) dev-down @$(MAKE) dev-down
@echo "✅ E2E tests completed successfully"
# =================================================================== # ===================================================================
# Information and Help # Information and Help
+3 -3
View File
@@ -347,10 +347,10 @@ health-endpoint = "/health"
# =================================================================== # ===================================================================
[build] [build]
gradle-version = "9.0.0" gradle-version = "9.1.0"
java-version = "21" java-version = "21"
node-version = "20.12.0" node-version = "24.11.0"
nginx-version = "1.25-alpine" nginx-version = "1.29-alpine"
docker-version = "1.0.0" docker-version = "1.0.0"
# =================================================================== # ===================================================================
+1 -1
View File
@@ -2,7 +2,7 @@
# Docker Compose - Client Applications # Docker Compose - Client Applications
# Generated from docker/versions.toml # Generated from docker/versions.toml
# Environment: development # Environment: development
# Generated: 2025-11-11 12:07:58 UTC # Generated: 2025-11-11 16:11:31 UTC
# =================================================================== # ===================================================================
services: services:
+1 -1
View File
@@ -2,7 +2,7 @@
# Docker Compose - Application Services # Docker Compose - Application Services
# Generated from docker/versions.toml # Generated from docker/versions.toml
# Environment: development # Environment: development
# Generated: 2025-11-11 12:07:57 UTC # Generated: 2025-11-11 16:11:31 UTC
# =================================================================== # ===================================================================
services: services:
+40 -1
View File
@@ -2,7 +2,7 @@
# Docker Compose - Infrastructure Services # Docker Compose - Infrastructure Services
# Generated from docker/versions.toml # Generated from docker/versions.toml
# Environment: development # Environment: development
# Generated: 2025-11-11 12:07:57 UTC # Generated: 2025-11-11 16:11:31 UTC
# =================================================================== # ===================================================================
services: services:
@@ -111,6 +111,9 @@ services:
start_period: 40s start_period: 40s
restart: unless-stopped restart: unless-stopped
# ===================================================================
# Grafana
# ===================================================================
grafana: grafana:
image: grafana/grafana:${DOCKER_GRAFANA_VERSION:-11.3.0} image: grafana/grafana:${DOCKER_GRAFANA_VERSION:-11.3.0}
container_name: meldestelle-grafana container_name: meldestelle-grafana
@@ -136,6 +139,42 @@ services:
start_period: 40s start_period: 40s
restart: unless-stopped restart: unless-stopped
# ===================================================================
# Zipkin
# ===================================================================
zipkin:
image: openzipkin/zipkin:2
ports:
- "9411:9411"
networks:
- meldestelle-network
healthcheck:
test: ["CMD", "wget", "-q", "-O", "-", "http://localhost:9411/health"]
interval: 10s
timeout: 5s
retries: 3
start_period: 10s
restart: unless-stopped
# ===================================================================
# Consul
# ===================================================================
consul:
image: hashicorp/consul:1.15
ports:
- "8500:8500"
- "8600:8600/udp"
command: agent -server -ui -node=server-1 -bootstrap-expect=1 -client=0.0.0.0
networks:
- meldestelle-network
healthcheck:
test: [ "CMD", "curl", "-f", "http://localhost:8500/v1/status/leader" ]
interval: 10s
timeout: 5s
retries: 3
start_period: 15s
restart: unless-stopped
# =================================================================== # ===================================================================
# Volumes # Volumes
# =================================================================== # ===================================================================
+1 -1
View File
@@ -1,7 +1,7 @@
# =================================================================== # ===================================================================
# Clients Docker Build Arguments - dockerfiles/clients/* # Clients Docker Build Arguments - dockerfiles/clients/*
# Source: docker/versions.toml [categories.clients] # Source: docker/versions.toml [categories.clients]
# Last updated: 2025-11-11 12:07:52 UTC # Last updated: 2025-11-11 16:11:09 UTC
# =================================================================== # ===================================================================
# --- Include Global Arguments --- # --- Include Global Arguments ---
+1 -1
View File
@@ -1,7 +1,7 @@
# =================================================================== # ===================================================================
# Global Docker Build Arguments - Used by all categories # Global Docker Build Arguments - Used by all categories
# Source: docker/versions.toml # Source: docker/versions.toml
# Last updated: 2025-11-11 12:07:52 UTC # Last updated: 2025-11-11 16:11:09 UTC
# =================================================================== # ===================================================================
# --- Build Tools --- # --- Build Tools ---
+1 -1
View File
@@ -1,7 +1,7 @@
# =================================================================== # ===================================================================
# Infrastructure Docker Build Arguments - dockerfiles/infrastructure/* # Infrastructure Docker Build Arguments - dockerfiles/infrastructure/*
# Source: docker/versions.toml [categories.infrastructure] # Source: docker/versions.toml [categories.infrastructure]
# Last updated: 2025-11-11 12:07:52 UTC # Last updated: 2025-11-11 16:11:09 UTC
# =================================================================== # ===================================================================
# --- Include Global Arguments --- # --- Include Global Arguments ---
+1 -1
View File
@@ -1,7 +1,7 @@
# =================================================================== # ===================================================================
# Services Docker Build Arguments - dockerfiles/services/* # Services Docker Build Arguments - dockerfiles/services/*
# Source: docker/versions.toml [categories.services] # Source: docker/versions.toml [categories.services]
# Last updated: 2025-11-11 12:07:52 UTC # Last updated: 2025-11-11 16:11:09 UTC
# =================================================================== # ===================================================================
# --- Include Global Arguments --- # --- Include Global Arguments ---
+4 -4
View File
@@ -378,7 +378,7 @@ scrape_configs:
- 'members-service:8082' - 'members-service:8082'
- 'horses-service:8083' - 'horses-service:8083'
- 'events-service:8084' - 'events-service:8084'
- 'gateway:8080' - 'gateway:8081'
``` ```
### Grafana Dashboards ### Grafana Dashboards
@@ -430,7 +430,7 @@ spec:
- name: gateway - name: gateway
image: meldestelle/api-gateway:latest image: meldestelle/api-gateway:latest
ports: ports:
- containerPort: 8080 - containerPort: 8081
env: env:
- name: REDIS_HOST - name: REDIS_HOST
value: "redis-service" value: "redis-service"
@@ -535,10 +535,10 @@ kafka-consumer-groups --bootstrap-server localhost:9092 --describe --group melde
```bash ```bash
# Gateway Health Check # Gateway Health Check
curl http://localhost:8080/actuator/health curl http://localhost:8081/actuator/health
# Route Configuration prüfen # Route Configuration prüfen
curl http://localhost:8080/actuator/gateway/routes curl http://localhost:8081/actuator/gateway/routes
``` ```
## Best Practices ## Best Practices
@@ -279,7 +279,7 @@ cd /home/stefan/WsMeldestelle/Meldestelle
# Mit Docker # Mit Docker
docker build -t meldestelle/gateway:latest -f infrastructure/gateway/Dockerfile . docker build -t meldestelle/gateway:latest -f infrastructure/gateway/Dockerfile .
docker run -p 8080:8080 meldestelle/gateway:latest docker run -p 8081:8081 meldestelle/gateway:latest
``` ```
📖 **Detaillierte Startup-Anleitung:** Siehe `GATEWAY-STARTUP-GUIDE.md` im Projekt-Root für vollständige Befehle und Fehlerbehebung. 📖 **Detaillierte Startup-Anleitung:** Siehe `GATEWAY-STARTUP-GUIDE.md` im Projekt-Root für vollständige Befehle und Fehlerbehebung.
@@ -324,7 +324,7 @@ docker build -t meldestelle/gateway:1.0.0 \
# Container starten # Container starten
docker run -d \ docker run -d \
--name gateway \ --name gateway \
-p 8080:8080 \ -p 8081:8081 \
-e SPRING_PROFILES_ACTIVE=prod \ -e SPRING_PROFILES_ACTIVE=prod \
-e CONSUL_HOST=consul \ -e CONSUL_HOST=consul \
meldestelle/gateway:1.0.0 meldestelle/gateway:1.0.0
@@ -348,11 +348,11 @@ spec:
- name: gateway - name: gateway
image: meldestelle/gateway:1.0.0 image: meldestelle/gateway:1.0.0
ports: ports:
- containerPort: 8080 - containerPort: 8081
livenessProbe: livenessProbe:
httpGet: httpGet:
path: /actuator/health path: /actuator/health
port: 8080 port: 8081
initialDelaySeconds: 90 initialDelaySeconds: 90
periodSeconds: 30 periodSeconds: 30
``` ```
@@ -394,10 +394,10 @@ spec:
docker logs gateway | grep "correlationId" docker logs gateway | grep "correlationId"
# Circuit Breaker Status # Circuit Breaker Status
curl http://localhost:8080/actuator/circuitbreakers curl http://localhost:8081/actuator/circuitbreakers
# Health Details # Health Details
curl http://localhost:8080/actuator/health curl http://localhost:8081/actuator/health
``` ```
## Zukünftige Erweiterungen ## Zukünftige Erweiterungen
@@ -11,16 +11,16 @@ spring:
resourceserver: resourceserver:
jwt: jwt:
# Issuer URI for JWT validation - Docker internal: keycloak:8080, External: localhost:8180 # Issuer URI for JWT validation - Docker internal: keycloak:8080, External: localhost:8180
issuer-uri: ${KEYCLOAK_ISSUER_URI:http://keycloak:8080/realms/meldestelle} issuer-uri: ${KEYCLOAK_ISSUER_URI:http://keycloak:8180/realms/meldestelle}
# JWK Set URI for fetching public keys to validate JWT signatures # JWK Set URI for fetching public keys to validate JWT signatures
jwk-set-uri: ${KEYCLOAK_JWK_SET_URI:http://keycloak:8080/realms/meldestelle/protocol/openid-connect/certs} jwk-set-uri: ${KEYCLOAK_JWK_SET_URI:http://keycloak:8180/realms/meldestelle/protocol/openid-connect/certs}
# Keycloak-spezifische Konfiguration # Keycloak-spezifische Konfiguration
keycloak: keycloak:
# Internal Docker service name, external via port 8180 # Internal Docker service name, external via port 8180
server-url: ${KEYCLOAK_SERVER_URL:http://keycloak:8080} server-url: ${KEYCLOAK_SERVER_URL:http://keycloak:8180}
issuer-uri: ${KEYCLOAK_ISSUER_URI:http://keycloak:8080/realms/meldestelle} issuer-uri: ${KEYCLOAK_ISSUER_URI:http://keycloak:8180/realms/meldestelle}
jwk-set-uri: ${KEYCLOAK_JWK_SET_URI:http://keycloak:8080/realms/meldestelle/protocol/openid-connect/certs} jwk-set-uri: ${KEYCLOAK_JWK_SET_URI:http://keycloak:8180/realms/meldestelle/protocol/openid-connect/certs}
realm: ${KEYCLOAK_REALM:meldestelle} realm: ${KEYCLOAK_REALM:meldestelle}
resource: ${KEYCLOAK_CLIENT_ID:api-gateway} resource: ${KEYCLOAK_CLIENT_ID:api-gateway}
client-id: ${KEYCLOAK_CLIENT_ID:api-gateway} client-id: ${KEYCLOAK_CLIENT_ID:api-gateway}
@@ -239,7 +239,7 @@ management:
zipkin: zipkin:
tracing: tracing:
endpoint: ${ZIPKIN_TRACING_ENDPOINT:http://localhost:9411/api/v2/spans} endpoint: ${ZIPKIN_TRACING_ENDPOINT:http://localhost:9411/api/v2/spans}
# Reduziert Verbindungsfehler wenn Zipkin nicht verfügbar ist # Reduziert Verbindungsfehler, wenn Zipkin nicht verfügbar ist
connect-timeout: 1s connect-timeout: 1s
read-timeout: 10s read-timeout: 10s
@@ -55,7 +55,7 @@ servers:
description: Production Server description: Production Server
- url: https://staging-api.meldestelle.at - url: https://staging-api.meldestelle.at
description: Staging Server description: Staging Server
- url: http://localhost:8080 - url: http://localhost:8081
description: Local Development Server description: Local Development Server
tags: tags:
+754
View File
@@ -190,3 +190,757 @@ Caused by: java.net.ConnectException: Verbindungsaufbau abgelehnt
at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75) at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75)
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142) at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
... 45 common frames omitted ... 45 common frames omitted
2025-11-11 17:24:21.517 [background-preinit] INFO [] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.3.Final
2025-11-11 17:24:21.541 [main] INFO [] a.m.i.gateway.GatewayApplicationKt - Starting GatewayApplicationKt using Java 21.0.9 with PID 60081 (/home/stefan-mo/WsMeldestelle/Meldestelle/infrastructure/gateway/build/classes/kotlin/main started by stefan-mo in /home/stefan-mo/WsMeldestelle/Meldestelle)
2025-11-11 17:24:21.542 [main] DEBUG [] a.m.i.gateway.GatewayApplicationKt - Running with Spring Boot v3.5.6, Spring v6.2.11
2025-11-11 17:24:21.542 [main] INFO [] a.m.i.gateway.GatewayApplicationKt - The following 1 profile is active: "dev"
2025-11-11 17:24:22.681 [main] INFO [] o.s.cloud.context.scope.GenericScope - BeanFactory id=4eb90187-1826-32ce-9dc7-fa80cb000915
2025-11-11 17:24:24.774 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [After]
2025-11-11 17:24:24.774 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Before]
2025-11-11 17:24:24.774 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Between]
2025-11-11 17:24:24.775 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Cookie]
2025-11-11 17:24:24.775 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Header]
2025-11-11 17:24:24.775 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Host]
2025-11-11 17:24:24.775 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Method]
2025-11-11 17:24:24.775 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Path]
2025-11-11 17:24:24.775 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Query]
2025-11-11 17:24:24.775 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [ReadBody]
2025-11-11 17:24:24.775 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [RemoteAddr]
2025-11-11 17:24:24.775 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [XForwardedRemoteAddr]
2025-11-11 17:24:24.775 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Weight]
2025-11-11 17:24:24.775 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [CloudFoundryRouteService]
2025-11-11 17:24:25.480 [main] INFO [] o.s.b.a.e.web.EndpointLinksResolver - Exposing 6 endpoints beneath base path '/actuator'
2025-11-11 17:24:26.114 [main] WARN [] o.s.c.l.c.LoadBalancerCacheAutoConfiguration$LoadBalancerCaffeineWarnLogger - Spring Cloud LoadBalancer is currently working with the default cache. While this cache implementation is useful for development and tests, it's recommended to use Caffeine cache in production.You can switch to using Caffeine cache, by adding it and org.springframework.cache.caffeine.CaffeineCacheManager to the classpath.
2025-11-11 17:24:26.202 [catalogWatchTaskScheduler-1] ERROR [] o.s.c.c.discovery.ConsulCatalogWatch - Error watching Consul CatalogServices
com.ecwid.consul.transport.TransportException: org.apache.http.conn.HttpHostConnectException: Connect to localhost:8500 [localhost/127.0.0.1] failed: Verbindungsaufbau abgelehnt
at com.ecwid.consul.transport.AbstractHttpTransport.executeRequest(AbstractHttpTransport.java:83)
at com.ecwid.consul.transport.AbstractHttpTransport.makeGetRequest(AbstractHttpTransport.java:36)
at com.ecwid.consul.v1.ConsulRawClient.makeGetRequest(ConsulRawClient.java:139)
at com.ecwid.consul.v1.catalog.CatalogConsulClient.getCatalogServices(CatalogConsulClient.java:143)
at com.ecwid.consul.v1.ConsulClient.getCatalogServices(ConsulClient.java:400)
at org.springframework.cloud.consul.discovery.ConsulCatalogWatch.catalogServicesWatch(ConsulCatalogWatch.java:131)
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:358)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: org.apache.http.conn.HttpHostConnectException: Connect to localhost:8500 [localhost/127.0.0.1] failed: Verbindungsaufbau abgelehnt
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:156)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:376)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:393)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:221)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:165)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:140)
at com.ecwid.consul.transport.AbstractHttpTransport.executeRequest(AbstractHttpTransport.java:70)
... 12 common frames omitted
Caused by: java.net.ConnectException: Verbindungsaufbau abgelehnt
at java.base/sun.nio.ch.Net.pollConnect(Native Method)
at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:682)
at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542)
at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:592)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327)
at java.base/java.net.Socket.connect(Socket.java:751)
at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75)
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
... 24 common frames omitted
2025-11-11 17:24:26.221 [main] INFO [] o.s.b.w.e.netty.NettyWebServer - Netty started on port 8080 (http)
2025-11-11 17:24:26.224 [main] INFO [] o.s.c.c.s.ConsulServiceRegistry - Registering service with consul: NewService{id='meldestelle-8080-3272ca20-9767-47d5-907c-f731f4d8125e', name='meldestelle', tags=[], address='10.0.0.18', meta={secure=false}, port=8080, enableTagOverride=null, check=Check{script='null', dockerContainerID='null', shell='null', interval='10s', ttl='null', http='http://10.0.0.18:8080/actuator/health', method='null', header={}, tcp='null', timeout='null', deregisterCriticalServiceAfter='null', tlsSkipVerify=null, status='null', grpc='null', grpcUseTLS=null}, checks=null}
2025-11-11 17:24:26.233 [main] ERROR [] o.s.c.c.s.ConsulServiceRegistry - Error registering service with consul: NewService{id='meldestelle-8080-3272ca20-9767-47d5-907c-f731f4d8125e', name='meldestelle', tags=[], address='10.0.0.18', meta={secure=false}, port=8080, enableTagOverride=null, check=Check{script='null', dockerContainerID='null', shell='null', interval='10s', ttl='null', http='http://10.0.0.18:8080/actuator/health', method='null', header={}, tcp='null', timeout='null', deregisterCriticalServiceAfter='null', tlsSkipVerify=null, status='null', grpc='null', grpcUseTLS=null}, checks=null}
com.ecwid.consul.transport.TransportException: org.apache.http.conn.HttpHostConnectException: Connect to localhost:8500 [localhost/127.0.0.1] failed: Verbindungsaufbau abgelehnt
at com.ecwid.consul.transport.AbstractHttpTransport.executeRequest(AbstractHttpTransport.java:83)
at com.ecwid.consul.transport.AbstractHttpTransport.makePutRequest(AbstractHttpTransport.java:49)
at com.ecwid.consul.v1.ConsulRawClient.makePutRequest(ConsulRawClient.java:163)
at com.ecwid.consul.v1.agent.AgentConsulClient.agentServiceRegister(AgentConsulClient.java:273)
at com.ecwid.consul.v1.ConsulClient.agentServiceRegister(ConsulClient.java:310)
at org.springframework.cloud.consul.serviceregistry.ConsulServiceRegistry.register(ConsulServiceRegistry.java:67)
at org.springframework.cloud.consul.serviceregistry.ConsulServiceRegistry.register(ConsulServiceRegistry.java:43)
at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.register(AbstractAutoServiceRegistration.java:264)
at org.springframework.cloud.consul.serviceregistry.ConsulAutoServiceRegistration.register(ConsulAutoServiceRegistration.java:80)
at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.start(AbstractAutoServiceRegistration.java:156)
at org.springframework.cloud.consul.serviceregistry.ConsulAutoServiceRegistration.start(ConsulAutoServiceRegistration.java:70)
at org.springframework.cloud.consul.serviceregistry.ConsulAutoServiceRegistrationListener.onApplicationEvent(ConsulAutoServiceRegistrationListener.java:60)
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:185)
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:178)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:156)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:454)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:387)
at org.springframework.boot.web.reactive.context.WebServerManager.start(WebServerManager.java:57)
at org.springframework.boot.web.reactive.context.WebServerStartStopLifecycle.start(WebServerStartStopLifecycle.java:41)
at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:405)
at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:394)
at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:586)
at java.base/java.lang.Iterable.forEach(Iterable.java:75)
at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:364)
at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:310)
at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:1006)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:630)
at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh(ReactiveWebServerApplicationContext.java:66)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:318)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1361)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1350)
at at.mocode.infrastructure.gateway.GatewayApplicationKt.main(GatewayApplication.kt:13)
Caused by: org.apache.http.conn.HttpHostConnectException: Connect to localhost:8500 [localhost/127.0.0.1] failed: Verbindungsaufbau abgelehnt
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:156)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:376)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:393)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:221)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:165)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:140)
at com.ecwid.consul.transport.AbstractHttpTransport.executeRequest(AbstractHttpTransport.java:70)
... 33 common frames omitted
Caused by: java.net.ConnectException: Verbindungsaufbau abgelehnt
at java.base/sun.nio.ch.Net.pollConnect(Native Method)
at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:682)
at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542)
at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:592)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327)
at java.base/java.net.Socket.connect(Socket.java:751)
at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75)
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
... 45 common frames omitted
2025-11-11 17:24:28.246 [main] WARN [] o.s.b.w.r.c.AnnotationConfigReactiveWebServerApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Failed to start bean 'webServerStartStop'
2025-11-11 17:24:28.270 [main] INFO [] o.s.b.a.l.ConditionEvaluationReportLogger -
Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2025-11-11 17:24:28.284 [main] ERROR [] o.s.boot.SpringApplication - Application run failed
org.springframework.context.ApplicationContextException: Failed to start bean 'webServerStartStop'
at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:408)
at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:394)
at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:586)
at java.base/java.lang.Iterable.forEach(Iterable.java:75)
at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:364)
at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:310)
at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:1006)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:630)
at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh(ReactiveWebServerApplicationContext.java:66)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:318)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1361)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1350)
at at.mocode.infrastructure.gateway.GatewayApplicationKt.main(GatewayApplication.kt:13)
Caused by: com.ecwid.consul.transport.TransportException: org.apache.http.conn.HttpHostConnectException: Connect to localhost:8500 [localhost/127.0.0.1] failed: Verbindungsaufbau abgelehnt
at com.ecwid.consul.transport.AbstractHttpTransport.executeRequest(AbstractHttpTransport.java:83)
at com.ecwid.consul.transport.AbstractHttpTransport.makePutRequest(AbstractHttpTransport.java:49)
at com.ecwid.consul.v1.ConsulRawClient.makePutRequest(ConsulRawClient.java:163)
at com.ecwid.consul.v1.agent.AgentConsulClient.agentServiceRegister(AgentConsulClient.java:273)
at com.ecwid.consul.v1.ConsulClient.agentServiceRegister(ConsulClient.java:310)
at org.springframework.cloud.consul.serviceregistry.ConsulServiceRegistry.register(ConsulServiceRegistry.java:67)
at org.springframework.cloud.consul.serviceregistry.ConsulServiceRegistry.register(ConsulServiceRegistry.java:43)
at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.register(AbstractAutoServiceRegistration.java:264)
at org.springframework.cloud.consul.serviceregistry.ConsulAutoServiceRegistration.register(ConsulAutoServiceRegistration.java:80)
at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.start(AbstractAutoServiceRegistration.java:156)
at org.springframework.cloud.consul.serviceregistry.ConsulAutoServiceRegistration.start(ConsulAutoServiceRegistration.java:70)
at org.springframework.cloud.consul.serviceregistry.ConsulAutoServiceRegistrationListener.onApplicationEvent(ConsulAutoServiceRegistrationListener.java:60)
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:185)
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:178)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:156)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:454)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:387)
at org.springframework.boot.web.reactive.context.WebServerManager.start(WebServerManager.java:57)
at org.springframework.boot.web.reactive.context.WebServerStartStopLifecycle.start(WebServerStartStopLifecycle.java:41)
at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:405)
... 14 common frames omitted
Caused by: org.apache.http.conn.HttpHostConnectException: Connect to localhost:8500 [localhost/127.0.0.1] failed: Verbindungsaufbau abgelehnt
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:156)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:376)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:393)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:221)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:165)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:140)
at com.ecwid.consul.transport.AbstractHttpTransport.executeRequest(AbstractHttpTransport.java:70)
... 33 common frames omitted
Caused by: java.net.ConnectException: Verbindungsaufbau abgelehnt
at java.base/sun.nio.ch.Net.pollConnect(Native Method)
at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:682)
at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542)
at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:592)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327)
at java.base/java.net.Socket.connect(Socket.java:751)
at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75)
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
... 45 common frames omitted
2025-11-11 17:41:20.785 [background-preinit] INFO [] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.3.Final
2025-11-11 17:41:20.807 [main] INFO [] a.m.i.gateway.GatewayApplicationKt - Starting GatewayApplicationKt using Java 21.0.9 with PID 66761 (/home/stefan-mo/WsMeldestelle/Meldestelle/infrastructure/gateway/build/classes/kotlin/main started by stefan-mo in /home/stefan-mo/WsMeldestelle/Meldestelle)
2025-11-11 17:41:20.807 [main] DEBUG [] a.m.i.gateway.GatewayApplicationKt - Running with Spring Boot v3.5.6, Spring v6.2.11
2025-11-11 17:41:20.807 [main] INFO [] a.m.i.gateway.GatewayApplicationKt - The following 1 profile is active: "dev"
2025-11-11 17:41:21.890 [main] INFO [] o.s.cloud.context.scope.GenericScope - BeanFactory id=4eb90187-1826-32ce-9dc7-fa80cb000915
2025-11-11 17:41:23.800 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [After]
2025-11-11 17:41:23.800 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Before]
2025-11-11 17:41:23.800 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Between]
2025-11-11 17:41:23.800 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Cookie]
2025-11-11 17:41:23.800 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Header]
2025-11-11 17:41:23.800 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Host]
2025-11-11 17:41:23.800 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Method]
2025-11-11 17:41:23.800 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Path]
2025-11-11 17:41:23.800 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Query]
2025-11-11 17:41:23.800 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [ReadBody]
2025-11-11 17:41:23.800 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [RemoteAddr]
2025-11-11 17:41:23.800 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [XForwardedRemoteAddr]
2025-11-11 17:41:23.800 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Weight]
2025-11-11 17:41:23.801 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [CloudFoundryRouteService]
2025-11-11 17:41:24.395 [main] INFO [] o.s.b.a.e.web.EndpointLinksResolver - Exposing 6 endpoints beneath base path '/actuator'
2025-11-11 17:41:25.036 [main] WARN [] o.s.c.l.c.LoadBalancerCacheAutoConfiguration$LoadBalancerCaffeineWarnLogger - Spring Cloud LoadBalancer is currently working with the default cache. While this cache implementation is useful for development and tests, it's recommended to use Caffeine cache in production.You can switch to using Caffeine cache, by adding it and org.springframework.cache.caffeine.CaffeineCacheManager to the classpath.
2025-11-11 17:41:25.145 [main] INFO [] o.s.b.w.e.netty.NettyWebServer - Netty started on port 8080 (http)
2025-11-11 17:41:25.148 [main] INFO [] o.s.c.c.s.ConsulServiceRegistry - Registering service with consul: NewService{id='meldestelle-8080-4eca3f58-3081-422e-8d6f-88fd29eca82b', name='meldestelle', tags=[], address='10.0.0.18', meta={secure=false}, port=8080, enableTagOverride=null, check=Check{script='null', dockerContainerID='null', shell='null', interval='10s', ttl='null', http='http://10.0.0.18:8080/actuator/health', method='null', header={}, tcp='null', timeout='null', deregisterCriticalServiceAfter='null', tlsSkipVerify=null, status='null', grpc='null', grpcUseTLS=null}, checks=null}
2025-11-11 17:41:25.293 [main] INFO [] a.m.i.gateway.GatewayApplicationKt - Started GatewayApplicationKt in 4.771 seconds (process running for 5.315)
2025-11-11 17:44:40.693 [parallel-4] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /[0:0:0:0:0:0:0:1]:60764
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:40.775 [parallel-7] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49250
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:40.781 [parallel-10] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49256
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:40.786 [parallel-13] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49272
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:40.790 [parallel-16] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49284
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:40.795 [parallel-3] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49300
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:40.800 [parallel-6] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49312
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:40.804 [parallel-9] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49316
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:40.809 [parallel-12] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49328
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:40.814 [parallel-15] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49336
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:40.818 [parallel-2] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49340
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:40.822 [parallel-5] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49342
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:40.827 [parallel-8] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49352
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:40.832 [parallel-11] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49366
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:40.835 [parallel-14] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49368
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:40.839 [parallel-1] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49370
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:40.843 [parallel-4] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49372
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:40.848 [parallel-7] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49382
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:40.851 [parallel-10] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49390
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:40.854 [parallel-13] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49404
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:40.857 [parallel-16] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49408
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:40.861 [parallel-3] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49412
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:40.865 [parallel-6] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49414
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:40.868 [parallel-9] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49424
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:40.871 [parallel-12] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49434
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:40.874 [parallel-15] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49448
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:40.891 [reactor-http-epoll-16] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 503 SERVICE_UNAVAILABLE
ResponseTime: 17ms
2025-11-11 17:44:40.894 [reactor-http-epoll-16] WARN [] i.m.p.PrometheusMeterRegistry - The meter (MeterId{name='gateway_errors_total', tags=[tag(application=meldestelle),tag(component=infrastructure),tag(environment=dev),tag(error_type=server_error),tag(gateway=api-gateway),tag(instance=meldestelle-8080-7c278a17-e0ca-4d8a-ac26-1dbd531a9168),tag(method=GET),tag(path=/),tag(service=gateway),tag(status=503),tag(status_series=5xx)]}) registration has failed: Prometheus requires that all meters with the same name have the same set of tag keys. There is already an existing meter named 'gateway_errors' containing tag keys [application, component, environment, gateway, instance, service]. The meter you are attempting to register has keys [application, component, environment, error_type, gateway, instance, method, path, service, status, status_series]. Note that subsequent logs will be logged at debug level.
2025-11-11 17:44:40.950 [parallel-4] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49464
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:40.952 [reactor-http-epoll-2] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 503 SERVICE_UNAVAILABLE
ResponseTime: 2ms
2025-11-11 17:44:41.058 [parallel-9] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49478
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:41.060 [reactor-http-epoll-4] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 503 SERVICE_UNAVAILABLE
ResponseTime: 3ms
2025-11-11 17:44:41.265 [parallel-14] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:38924
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:41.267 [reactor-http-epoll-6] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 503 SERVICE_UNAVAILABLE
ResponseTime: 2ms
2025-11-11 17:44:41.275 [reactor-http-epoll-14] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 407ms
2025-11-11 17:44:41.275 [reactor-http-epoll-15] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 404ms
2025-11-11 17:44:41.276 [reactor-http-epoll-13] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 411ms
2025-11-11 17:44:41.277 [reactor-http-epoll-12] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 416ms
2025-11-11 17:44:41.278 [reactor-http-epoll-11] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 421ms
2025-11-11 17:44:41.279 [reactor-http-epoll-10] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 425ms
2025-11-11 17:44:41.280 [reactor-http-epoll-9] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 429ms
2025-11-11 17:44:41.282 [reactor-http-epoll-8] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 434ms
2025-11-11 17:44:41.283 [reactor-http-epoll-7] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 440ms
2025-11-11 17:44:41.284 [reactor-http-epoll-6] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 445ms
2025-11-11 17:44:41.285 [reactor-http-epoll-5] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 450ms
2025-11-11 17:44:41.287 [reactor-http-epoll-4] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 455ms
2025-11-11 17:44:41.288 [reactor-http-epoll-3] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 461ms
2025-11-11 17:44:41.289 [reactor-http-epoll-2] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 467ms
2025-11-11 17:44:41.291 [reactor-http-epoll-1] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 473ms
2025-11-11 17:44:41.292 [reactor-http-epoll-16] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 478ms
2025-11-11 17:44:41.294 [reactor-http-epoll-15] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 485ms
2025-11-11 17:44:41.295 [reactor-http-epoll-14] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 491ms
2025-11-11 17:44:41.297 [reactor-http-epoll-13] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 497ms
2025-11-11 17:44:41.298 [reactor-http-epoll-12] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 503ms
2025-11-11 17:44:41.300 [reactor-http-epoll-11] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 510ms
2025-11-11 17:44:41.303 [reactor-http-epoll-10] WARN [] r.n.http.client.HttpClientConnect - [0533bbdd-1, L:/127.0.0.1:49284 - R:localhost/127.0.0.1:8080] The connection observed an error
io.netty.handler.codec.http.TooLongHttpHeaderException: HTTP header is larger than 8192 bytes.
at io.netty.handler.codec.http.HttpObjectDecoder$HeaderParser.newException(HttpObjectDecoder.java:1224)
at io.netty.handler.codec.http.HttpObjectDecoder$HeaderParser.parse(HttpObjectDecoder.java:1188)
at io.netty.handler.codec.http.HttpObjectDecoder.readHeaders(HttpObjectDecoder.java:768)
at io.netty.handler.codec.http.HttpObjectDecoder.decode(HttpObjectDecoder.java:382)
at io.netty.handler.codec.http.HttpClientCodec$Decoder.decode(HttpClientCodec.java:320)
at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:530)
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:469)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290)
at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868)
at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:799)
at io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe$1.run(AbstractEpollChannel.java:425)
at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173)
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:405)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.base/java.lang.Thread.run(Thread.java:1583)
2025-11-11 17:44:41.306 [reactor-http-epoll-10] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 503 SERVICE_UNAVAILABLE
ResponseTime: 521ms
2025-11-11 17:44:41.361 [parallel-8] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:38924
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:41.363 [parallel-11] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49434
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:41.366 [parallel-14] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49424
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:41.368 [parallel-1] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49414
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:41.370 [parallel-4] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49412
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:41.372 [parallel-7] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49408
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:41.375 [parallel-10] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49404
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:41.378 [parallel-13] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49390
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:41.380 [parallel-16] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49382
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:41.382 [parallel-3] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49372
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:41.386 [parallel-6] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49370
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:41.388 [parallel-9] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49368
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:41.391 [parallel-12] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49366
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:41.394 [parallel-15] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49352
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:41.396 [parallel-2] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49342
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:41.399 [parallel-5] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49340
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:41.401 [parallel-8] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49336
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:41.404 [parallel-11] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49328
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:41.405 [parallel-14] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49316
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:41.408 [parallel-1] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49312
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:41.410 [parallel-4] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:49300
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:41.413 [parallel-7] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:38930
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:41.416 [parallel-10] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:38936
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:41.416 [parallel-10] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 429 TOO_MANY_REQUESTS
ResponseTime: 0ms
2025-11-11 17:44:41.419 [reactor-http-epoll-7] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 6ms
2025-11-11 17:44:41.419 [reactor-http-epoll-12] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 9ms
2025-11-11 17:44:41.420 [reactor-http-epoll-13] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 12ms
2025-11-11 17:44:41.421 [reactor-http-epoll-14] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 16ms
2025-11-11 17:44:41.422 [reactor-http-epoll-15] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 18ms
2025-11-11 17:44:41.424 [reactor-http-epoll-16] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 23ms
2025-11-11 17:44:41.425 [reactor-http-epoll-1] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 26ms
2025-11-11 17:44:41.426 [reactor-http-epoll-2] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 30ms
2025-11-11 17:44:41.427 [reactor-http-epoll-3] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 33ms
2025-11-11 17:44:41.428 [reactor-http-epoll-4] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 37ms
2025-11-11 17:44:41.429 [reactor-http-epoll-5] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 41ms
2025-11-11 17:44:41.430 [reactor-http-epoll-6] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 44ms
2025-11-11 17:44:41.432 [reactor-http-epoll-7] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 50ms
2025-11-11 17:44:41.433 [reactor-http-epoll-8] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 53ms
2025-11-11 17:44:41.434 [reactor-http-epoll-9] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 56ms
2025-11-11 17:44:41.435 [reactor-http-epoll-10] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 60ms
2025-11-11 17:44:41.436 [reactor-http-epoll-11] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 64ms
2025-11-11 17:44:41.438 [reactor-http-epoll-12] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 67ms
2025-11-11 17:44:41.439 [reactor-http-epoll-13] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 71ms
2025-11-11 17:44:41.441 [reactor-http-epoll-14] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 75ms
2025-11-11 17:44:41.441 [reactor-http-epoll-13] WARN [] r.n.http.client.HttpClientConnect - [5e3549f4-2, L:/127.0.0.1:49424 - R:localhost/127.0.0.1:8080] The connection observed an error
io.netty.handler.codec.http.TooLongHttpHeaderException: HTTP header is larger than 8192 bytes.
at io.netty.handler.codec.http.HttpObjectDecoder$HeaderParser.newException(HttpObjectDecoder.java:1224)
at io.netty.handler.codec.http.HttpObjectDecoder$HeaderParser.parse(HttpObjectDecoder.java:1188)
at io.netty.handler.codec.http.HttpObjectDecoder.readHeaders(HttpObjectDecoder.java:768)
at io.netty.handler.codec.http.HttpObjectDecoder.decode(HttpObjectDecoder.java:382)
at io.netty.handler.codec.http.HttpClientCodec$Decoder.decode(HttpClientCodec.java:320)
at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:530)
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:469)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290)
at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868)
at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:799)
at io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe$1.run(AbstractEpollChannel.java:425)
at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173)
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:405)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.base/java.lang.Thread.run(Thread.java:1583)
2025-11-11 17:44:41.443 [reactor-http-epoll-13] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 503 SERVICE_UNAVAILABLE
ResponseTime: 80ms
2025-11-11 17:44:41.497 [parallel-3] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [REQUEST] [f8c25936-6e27-4bee-9288-a72992217a64]
Method: GET
URI: http://localhost:8080/
RemoteAddress: /127.0.0.1:38936
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
2025-11-11 17:44:41.497 [parallel-3] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 429 TOO_MANY_REQUESTS
ResponseTime: 0ms
2025-11-11 17:44:41.500 [reactor-http-epoll-6] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 139ms
2025-11-11 17:44:41.501 [reactor-http-epoll-9] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 720ms
2025-11-11 17:44:41.502 [reactor-http-epoll-8] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 727ms
2025-11-11 17:44:41.502 [reactor-http-epoll-6] INFO [] a.m.i.g.config.EnhancedLoggingFilter - [RESPONSE] [f8c25936-6e27-4bee-9288-a72992217a64]
Status: 200 OK
ResponseTime: 809ms
2025-11-11 17:54:36.819 [SpringApplicationShutdownHook] INFO [] o.s.b.w.e.netty.GracefulShutdown - Commencing graceful shutdown. Waiting for active requests to complete
2025-11-11 17:54:36.821 [netty-shutdown] INFO [] o.s.b.w.e.netty.GracefulShutdown - Graceful shutdown complete
2025-11-11 17:54:38.831 [SpringApplicationShutdownHook] INFO [] o.s.c.c.s.ConsulServiceRegistry - Deregistering service with consul: meldestelle-8080-4eca3f58-3081-422e-8d6f-88fd29eca82b
2025-11-11 17:56:49.328 [background-preinit] INFO [] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.3.Final
2025-11-11 17:56:49.354 [main] INFO [] a.m.i.gateway.GatewayApplicationKt - Starting GatewayApplicationKt using Java 21.0.9 with PID 77080 (/home/stefan-mo/WsMeldestelle/Meldestelle/infrastructure/gateway/build/classes/kotlin/main started by stefan-mo in /home/stefan-mo/WsMeldestelle/Meldestelle)
2025-11-11 17:56:49.355 [main] DEBUG [] a.m.i.gateway.GatewayApplicationKt - Running with Spring Boot v3.5.6, Spring v6.2.11
2025-11-11 17:56:49.355 [main] INFO [] a.m.i.gateway.GatewayApplicationKt - The following 1 profile is active: "dev"
2025-11-11 17:56:50.482 [main] INFO [] o.s.cloud.context.scope.GenericScope - BeanFactory id=4eb90187-1826-32ce-9dc7-fa80cb000915
2025-11-11 17:56:52.459 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [After]
2025-11-11 17:56:52.460 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Before]
2025-11-11 17:56:52.460 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Between]
2025-11-11 17:56:52.460 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Cookie]
2025-11-11 17:56:52.460 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Header]
2025-11-11 17:56:52.460 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Host]
2025-11-11 17:56:52.460 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Method]
2025-11-11 17:56:52.460 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Path]
2025-11-11 17:56:52.460 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Query]
2025-11-11 17:56:52.460 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [ReadBody]
2025-11-11 17:56:52.460 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [RemoteAddr]
2025-11-11 17:56:52.460 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [XForwardedRemoteAddr]
2025-11-11 17:56:52.460 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Weight]
2025-11-11 17:56:52.460 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [CloudFoundryRouteService]
2025-11-11 17:56:53.117 [main] INFO [] o.s.b.a.e.web.EndpointLinksResolver - Exposing 6 endpoints beneath base path '/actuator'
2025-11-11 17:56:53.677 [main] WARN [] o.s.c.l.c.LoadBalancerCacheAutoConfiguration$LoadBalancerCaffeineWarnLogger - Spring Cloud LoadBalancer is currently working with the default cache. While this cache implementation is useful for development and tests, it's recommended to use Caffeine cache in production.You can switch to using Caffeine cache, by adding it and org.springframework.cache.caffeine.CaffeineCacheManager to the classpath.
2025-11-11 17:56:53.786 [main] INFO [] o.s.b.w.e.netty.NettyWebServer - Netty started on port 8080 (http)
2025-11-11 17:56:53.788 [main] INFO [] o.s.c.c.s.ConsulServiceRegistry - Registering service with consul: NewService{id='meldestelle-8080-53c3b7cb-cff4-4c60-a423-ee7f507acd3b', name='meldestelle', tags=[], address='10.0.0.18', meta={secure=false}, port=8080, enableTagOverride=null, check=Check{script='null', dockerContainerID='null', shell='null', interval='10s', ttl='null', http='http://10.0.0.18:8080/actuator/health', method='null', header={}, tcp='null', timeout='null', deregisterCriticalServiceAfter='null', tlsSkipVerify=null, status='null', grpc='null', grpcUseTLS=null}, checks=null}
2025-11-11 17:56:53.925 [main] INFO [] a.m.i.gateway.GatewayApplicationKt - Started GatewayApplicationKt in 4.9 seconds (process running for 5.483)
2025-11-11 17:57:12.800 [SpringApplicationShutdownHook] INFO [] o.s.b.w.e.netty.GracefulShutdown - Commencing graceful shutdown. Waiting for active requests to complete
2025-11-11 17:57:12.802 [netty-shutdown] INFO [] o.s.b.w.e.netty.GracefulShutdown - Graceful shutdown complete
2025-11-11 17:57:14.812 [SpringApplicationShutdownHook] INFO [] o.s.c.c.s.ConsulServiceRegistry - Deregistering service with consul: meldestelle-8080-53c3b7cb-cff4-4c60-a423-ee7f507acd3b
2025-11-11 18:13:55.110 [background-preinit] INFO [] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.3.Final
2025-11-11 18:13:55.137 [main] INFO [] a.m.i.gateway.GatewayApplicationKt - Starting GatewayApplicationKt using Java 21.0.9 with PID 91093 (/home/stefan-mo/WsMeldestelle/Meldestelle/infrastructure/gateway/build/classes/kotlin/main started by stefan-mo in /home/stefan-mo/WsMeldestelle/Meldestelle)
2025-11-11 18:13:55.138 [main] DEBUG [] a.m.i.gateway.GatewayApplicationKt - Running with Spring Boot v3.5.6, Spring v6.2.11
2025-11-11 18:13:55.138 [main] INFO [] a.m.i.gateway.GatewayApplicationKt - The following 1 profile is active: "dev"
2025-11-11 18:13:56.308 [main] INFO [] o.s.cloud.context.scope.GenericScope - BeanFactory id=4eb90187-1826-32ce-9dc7-fa80cb000915
2025-11-11 18:13:58.251 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [After]
2025-11-11 18:13:58.251 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Before]
2025-11-11 18:13:58.251 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Between]
2025-11-11 18:13:58.252 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Cookie]
2025-11-11 18:13:58.252 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Header]
2025-11-11 18:13:58.252 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Host]
2025-11-11 18:13:58.252 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Method]
2025-11-11 18:13:58.252 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Path]
2025-11-11 18:13:58.252 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Query]
2025-11-11 18:13:58.252 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [ReadBody]
2025-11-11 18:13:58.252 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [RemoteAddr]
2025-11-11 18:13:58.252 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [XForwardedRemoteAddr]
2025-11-11 18:13:58.252 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [Weight]
2025-11-11 18:13:58.252 [main] INFO [] o.s.c.g.r.RouteDefinitionRouteLocator - Loaded RoutePredicateFactory [CloudFoundryRouteService]
2025-11-11 18:13:58.898 [main] INFO [] o.s.b.a.e.web.EndpointLinksResolver - Exposing 6 endpoints beneath base path '/actuator'
2025-11-11 18:13:59.469 [main] WARN [] o.s.c.l.c.LoadBalancerCacheAutoConfiguration$LoadBalancerCaffeineWarnLogger - Spring Cloud LoadBalancer is currently working with the default cache. While this cache implementation is useful for development and tests, it's recommended to use Caffeine cache in production.You can switch to using Caffeine cache, by adding it and org.springframework.cache.caffeine.CaffeineCacheManager to the classpath.
2025-11-11 18:13:59.562 [main] INFO [] o.s.b.w.e.netty.NettyWebServer - Netty started on port 8080 (http)
2025-11-11 18:13:59.564 [main] INFO [] o.s.c.c.s.ConsulServiceRegistry - Registering service with consul: NewService{id='meldestelle-8080-d4055d7b-f605-4fde-a992-8b4f3adb8a86', name='meldestelle', tags=[], address='10.0.0.18', meta={secure=false}, port=8080, enableTagOverride=null, check=Check{script='null', dockerContainerID='null', shell='null', interval='10s', ttl='null', http='http://10.0.0.18:8080/actuator/health', method='null', header={}, tcp='null', timeout='null', deregisterCriticalServiceAfter='null', tlsSkipVerify=null, status='null', grpc='null', grpcUseTLS=null}, checks=null}
2025-11-11 18:13:59.707 [main] INFO [] a.m.i.gateway.GatewayApplicationKt - Started GatewayApplicationKt in 4.898 seconds (process running for 5.441)
2025-11-11 18:14:46.705 [SpringApplicationShutdownHook] INFO [] o.s.b.w.e.netty.GracefulShutdown - Commencing graceful shutdown. Waiting for active requests to complete
2025-11-11 18:14:46.706 [netty-shutdown] INFO [] o.s.b.w.e.netty.GracefulShutdown - Graceful shutdown complete
2025-11-11 18:14:48.719 [SpringApplicationShutdownHook] INFO [] o.s.c.c.s.ConsulServiceRegistry - Deregistering service with consul: meldestelle-8080-d4055d7b-f605-4fde-a992-8b4f3adb8a86
+5 -5
View File
@@ -38,8 +38,8 @@ readonly SERVICES_CONFIG=(
"postgres:5432:PostgreSQL:pg_isready -U meldestelle" "postgres:5432:PostgreSQL:pg_isready -U meldestelle"
"redis:6379:Redis:redis-cli ping" "redis:6379:Redis:redis-cli ping"
"consul:8500:Consul:http://localhost:8500/v1/status/leader" "consul:8500:Consul:http://localhost:8500/v1/status/leader"
"api-gateway:8081:API Gateway:http://localhost:8082/actuator/health" "api-gateway:8081:API Gateway:http://localhost:8082actuator/health"
"ping-service:8082Ping Service:http://localhost:8082actuator/health" "ping-service:8082ing Service:http://localhost:8082ctuator/health"
) )
# Integration with central Docker version management # Integration with central Docker version management
@@ -169,11 +169,11 @@ test_application_services() {
# Test API Gateway # Test API Gateway
log_info "Testing API Gateway..." log_info "Testing API Gateway..."
wait_for_service_with_retry "API Gateway" "http_health_check http://localhost:8082/actuator/health" || return 1 wait_for_service_with_retry "API Gateway" "http_health_check http://localhost:8082actuator/health" || return 1
# Test Ping Service # Test Ping Service
log_info "Testing Ping Service..." log_info "Testing Ping Service..."
wait_for_service_with_retry "Ping Service" "http_health_check http://localhost:8082actuator/health" || return 1 wait_for_service_with_retry "Ping Service" "http_health_check http://localhost:8082ctuator/health" || return 1
log_success "All application services are healthy!" log_success "All application services are healthy!"
} }
@@ -211,7 +211,7 @@ test_network_connectivity() {
log_info "Testing service-to-service connectivity..." log_info "Testing service-to-service connectivity..."
# Test API Gateway can reach backend services # Test API Gateway can reach backend services
if docker exec meldestelle-api-gateway curl -f -s --max-time 5 http://ping-service:8082actuator/health > /dev/null 2>&1; then if docker exec meldestelle-api-gateway curl -f -s --max-time 5 http://ping-service:8082ctuator/health > /dev/null 2>&1; then
log_success "API Gateway can reach Ping Service" log_success "API Gateway can reach Ping Service"
else else
log_error "API Gateway cannot reach Ping Service" log_error "API Gateway cannot reach Ping Service"
+3 -3
View File
@@ -241,7 +241,7 @@ CREATE TABLE platz (
#### Land erstellen #### Land erstellen
```bash ```bash
curl -X POST http://localhost:8080/api/masterdata/countries \ curl -X POST http://localhost:8081/api/masterdata/countries \
-H "Content-Type: application/json" \ -H "Content-Type: application/json" \
-d '{ -d '{
"isoAlpha2Code": "AT", "isoAlpha2Code": "AT",
@@ -257,13 +257,13 @@ curl -X POST http://localhost:8080/api/masterdata/countries \
#### Altersklassen für 16-jährigen Dressurreiter abrufen #### Altersklassen für 16-jährigen Dressurreiter abrufen
```bash ```bash
curl "http://localhost:8080/api/masterdata/altersklassen/age/16?sparte=DRESSUR" curl "http://localhost:8081/api/masterdata/altersklassen/age/16?sparte=DRESSUR"
``` ```
#### Geeignete Dressurplätze finden #### Geeignete Dressurplätze finden
```bash ```bash
curl "http://localhost:8080/api/masterdata/plaetze/suitable?typ=DRESSURPLATZ&dimension=20x60m" curl "http://localhost:8081/api/masterdata/plaetze/suitable?typ=DRESSURPLATZ&dimension=20x60m"
``` ```
## Konfiguration ## Konfiguration