Fall 01: Outbox bleibt auf NEW
Fehlerbild
Outbox Tabelle enthaelt Events, aber status bleibt NEW
Wahrscheinliche Ursache
Relay-Job laeuft nicht oder kann RabbitMQ nicht erreichen
Diagnosebefehl oder SQL
select event_id,event_type,status,created_at from outbox.events order by event_id desc;
Weitere Pruefung
docker compose logs rabbitmq && grep OutboxRelay runtime.log
Loesung
Relay aktivieren, RabbitMQ URL pruefen, Credentials korrigieren
Enterprise-Lektion
Dual-Write-Probleme werden sichtbar, wenn Infrastruktur und DB nicht zusammenpassen.
Fall 02: RabbitMQ Queue bleibt leer
Fehlerbild
Outbox Event wird PUBLISHED, Queue hat aber 0 Messages
Wahrscheinliche Ursache
Exchange/Binding/Routing-Key passt nicht
Diagnosebefehl oder SQL
rabbitmqctl list_bindings && rabbitmqctl list_queues name messages
Weitere Pruefung
routing key order.accepted mit binding vergleichen
Loesung
definitions.json korrigieren und Container neu starten
Enterprise-Lektion
Messaging ist nur so gut wie seine Routing-Konventionen.
Fall 03: Consumer verarbeitet doppelt
Fehlerbild
Billing-Log zeigt gleiche Order mehrfach
Wahrscheinliche Ursache
Retry ohne Idempotency
Diagnosebefehl oder SQL
grep "Billing received" runtime.log
Weitere Pruefung
select aggregate_id,count(*) from outbox.events group by aggregate_id;
Loesung
Idempotency-Tabelle oder processed_events einbauen
Enterprise-Lektion
In Eventsystemen ist At-least-once normal, Idempotency ist Pflicht.
Fall 04: Keycloak liefert 401
Fehlerbild
API antwortet Unauthorized
Wahrscheinliche Ursache
Token fehlt, abgelaufen oder Issuer falsch
Diagnosebefehl oder SQL
curl -i http://localhost:8080/api/orders/ORD-1/accept
Weitere Pruefung
JWT exp/iss pruefen
Loesung
Token neu holen und issuer-uri korrigieren
Enterprise-Lektion
401 bedeutet Authentifizierung fehlt oder ist ungueltig.
Fall 05: Keycloak liefert 403
Fehlerbild
order-reader ruft Admin-POST auf
Wahrscheinliche Ursache
Token ist gueltig, Rolle reicht nicht
Diagnosebefehl oder SQL
curl -i -H "Authorization: Bearer $TOKEN" -X POST ...
Weitere Pruefung
realm_access.roles pruefen
Loesung
richtige Rolle zuweisen oder Policy anpassen
Enterprise-Lektion
403 bedeutet Identitaet bekannt, aber Berechtigung fehlt.
Fall 06: Flyway Migration bricht ab
Fehlerbild
Runtime startet nicht
Wahrscheinliche Ursache
SQL ist nicht idempotent oder Schema fehlt
Diagnosebefehl oder SQL
select * from flyway_schema_history order by installed_rank;
Weitere Pruefung
docker compose logs postgres
Loesung
Migration fixen, lokale DB neu aufsetzen oder repair bewusst nutzen
Enterprise-Lektion
Migrationen sind Produktionsartefakte, keine Wegwerfskripte.
Fall 07: Payment Timeout
Fehlerbild
POST accept haengt oder liefert 5xx
Wahrscheinliche Ursache
Provider langsam oder Netzwerkproblem
Diagnosebefehl oder SQL
curl -i -X POST http://localhost:8089/payment/authorize
Weitere Pruefung
WireMock delay mapping pruefen
Loesung
Timeout + Retry + Circuit Breaker konfigurieren
Enterprise-Lektion
Resilience macht Fehler kontrollierbar, nicht unsichtbar.
Fall 08: Circuit Breaker bleibt offen
Fehlerbild
Payment-Aufrufe werden sofort abgelehnt
Wahrscheinliche Ursache
Fehlerquote bleibt hoch oder Recovery-Fenster zu lang
Diagnosebefehl oder SQL
curl /actuator/metrics/resilience4j.circuitbreaker.state
Weitere Pruefung
Logs und Metriken pruefen
Loesung
Provider stabilisieren, Wartezeit pruefen, manuell verifizieren
Enterprise-Lektion
Circuit Breaker schuetzt das System, muss aber beobachtet werden.
Fall 09: Grafana zeigt keine Daten
Fehlerbild
Dashboard leer
Wahrscheinliche Ursache
Prometheus scrape nicht erfolgreich
Diagnosebefehl oder SQL
curl http://localhost:9090/api/v1/targets
Weitere Pruefung
/actuator/prometheus direkt pruefen
Loesung
Prometheus Target korrigieren
Enterprise-Lektion
Dashboard ohne Datenquelle ist nur Dekoration.
Fall 10: Prometheus Alert feuert nicht
Fehlerbild
keine Alerts sichtbar
Wahrscheinliche Ursache
Rule-Datei nicht geladen oder Ausdruck falsch
Diagnosebefehl oder SQL
curl http://localhost:9090/api/v1/rules
Weitere Pruefung
Prometheus Config reload pruefen
Loesung
Rule in prometheus.yml einbinden
Enterprise-Lektion
Alerts sind produktionskritische Dokumentation als Code.
Fall 11: Docker Compose startet nicht
Fehlerbild
Container bleibt Created/Restarting
Wahrscheinliche Ursache
Port belegt oder Volume kaputt
Diagnosebefehl oder SQL
docker compose ps && docker compose logs
Weitere Pruefung
lsof -i :5432 oder netstat
Loesung
Port freigeben, compose down -v nur lokal bewusst
Enterprise-Lektion
Lokale Labs scheitern oft an alten Volumes.
Fall 12: PostgreSQL Login falsch
Fehlerbild
Runtime kann DB nicht erreichen
Wahrscheinliche Ursache
Credentials stimmen nicht mit Compose oder App ueberein
Diagnosebefehl oder SQL
docker compose exec postgres psql -U order_user -d orderdb -c "select 1"
Weitere Pruefung
application.yml mit compose vergleichen
Loesung
Credentials vereinheitlichen
Enterprise-Lektion
Konfiguration ist Teil der Architektur.
Fall 13: Kubernetes Pod CrashLoopBackOff
Fehlerbild
Pod startet und beendet sich wieder
Wahrscheinliche Ursache
Config, Secret oder Probe falsch
Diagnosebefehl oder SQL
kubectl describe pod && kubectl logs
Weitere Pruefung
Events und env vars pruefen
Loesung
ConfigMap/Secret/Probe korrigieren
Enterprise-Lektion
CrashLoop ist ein Symptom, Events zeigen oft die Ursache.
Fall 14: Readiness Probe rot
Fehlerbild
Service routet nicht
Wahrscheinliche Ursache
App laeuft, ist aber nicht bereit
Diagnosebefehl oder SQL
curl /actuator/health/readiness
Weitere Pruefung
kubectl describe pod
Loesung
Health-Abhaengigkeiten pruefen
Enterprise-Lektion
Readiness entscheidet Traffic, nicht nur Prozessstart.
Fall 15: SBOM/Lizenzgate bricht ab
Fehlerbild
CI Pipeline stoppt
Wahrscheinliche Ursache
Abhaengigkeit mit unerwuenschter Lizenz
Diagnosebefehl oder SQL
mvn cyclonedx:makeAggregateBom
Weitere Pruefung
dependency tree anschauen
Loesung
Dependency ersetzen oder Lizenzentscheidung dokumentieren
Enterprise-Lektion
Lizenzthemen muessen vor Release sichtbar sein.
Fall 16: Maven Multi-Module Build bricht
Fehlerbild
package/class not found
Wahrscheinliche Ursache
Modulabhaengigkeit falsch
Diagnosebefehl oder SQL
mvn -pl runtime -am test
Weitere Pruefung
pom modules und dependencyManagement pruefen
Loesung
Modulgrenzen korrigieren
Enterprise-Lektion
Build-Reihenfolge folgt Architekturgrenzen.
Fall 17: Domain importiert Spring
Fehlerbild
Domain ist nicht mehr frameworkfrei
Wahrscheinliche Ursache
Architekturregel verletzt
Diagnosebefehl oder SQL
grep -R "org.springframework" maven-project/domain/src
Weitere Pruefung
ArchUnit-Regel oder Checkscript nutzen
Loesung
Import entfernen, Port definieren
Enterprise-Lektion
Clean Architecture ist konkret durch Imports pruefbar.
Fall 18: Backup kann nicht restored werden
Fehlerbild
Restore faellt erst im Ernstfall auf
Wahrscheinliche Ursache
Backup nie geprueft
Diagnosebefehl oder SQL
pg_restore --list backup.dump
Weitere Pruefung
Testrestore in leerer DB
Loesung
regelmaessige Restore-Uebung einbauen
Enterprise-Lektion
Ein Backup ohne Restore-Test ist nur Hoffnung.
Fall 19: Correlation ID fehlt
Fehlerbild
Logs nicht zusammenfuehrbar
Wahrscheinliche Ursache
Filter oder Logging Pattern fehlt
Diagnosebefehl oder SQL
curl -H "X-Correlation-Id: demo" ...
Weitere Pruefung
grep demo logs
Loesung
Filter und MDC-Logging aktivieren
Enterprise-Lektion
Ohne Korrelation ist Incident-Diagnose langsam.
Fall 20: DLQ waechst
Fehlerbild
Dead Letter Queue hat Nachrichten
Wahrscheinliche Ursache
Consumer scheitert dauerhaft
Diagnosebefehl oder SQL
rabbitmqctl list_queues name messages
Weitere Pruefung
Payload und Exception analysieren
Loesung
Replay-Script und Fix-Forward verwenden
Enterprise-Lektion
DLQ ist kein Muellkorb, sondern Arbeitsvorrat fuer Betrieb.