MicroProfile Deep Dive
Config, REST Client, Fault Tolerance, JWT, Health, OpenAPI und Telemetry als Standard-Bausteine.
Version 2MicroProfileCodeDiagramm
In dieser Datei
MicroProfile als Enterprise-Standardisierung
MicroProfile reduziert Wildwuchs bei Microservices. Statt jedes Team eigene Health Checks, REST Clients, Retries und API-Dokumentation baut, liefern Spezifikationen ein gemeinsames Programmiermodell.
Fault Tolerance richtig einsetzen
Timeout kommt vor Retry. Retry braucht Idempotenz. Circuit Breaker braucht Metriken. Bulkheads verhindern, dass ein langsames System alle Ressourcen blockiert.
Health ist kein Monitoring-Ersatz
Health Checks steuern Plattformverhalten. Monitoring erklärt Trends, Fehler und Latenzen. Liveness, Readiness und Startup sollten getrennt werden.
Entscheidungen
| Entscheidung | Gute Praxis | Prüffrage |
|---|---|---|
| Fachliche Grenze | Zuerst Use Case, Invariante und Verantwortlichkeit klären. | Welche Geschäftsentscheidung wird geschützt? |
| Technische Grenze | Framework-/Library-Code hinter Port, Adapter oder Konfiguration kapseln. | Kann die Domain ohne Framework getestet werden? |
| Betrieb | Timeouts, Logs, Metriken, Traces, Security und Rollback definieren. | Wie erkennt der Betrieb Fehler rechtzeitig? |
Ausführliche Beispiele
REST Client mit Timeout und Retry
@RegisterRestClient(configKey = "customer-api")
public interface CustomerClient {
@GET
@Path("/customers/{id}")
@Timeout(1000)
@Retry(maxRetries = 2, delay = 100)
CustomerDto find(@PathParam("id") String id);
}
Readiness Health Check
@Readiness
@ApplicationScoped
public class DatabaseReadiness implements HealthCheck {
public HealthCheckResponse call() {
boolean ok = database.ping(Duration.ofSeconds(1));
return HealthCheckResponse.named("database").status(ok).build();
}
}
Typische Stolperfallen
| Stolperfalle | Warum gefährlich |
|---|---|
| Retry ohne Budget | Aufrufe werden langsamer und Last steigt. |
| Health prüft alles | Eine Partnerstörung darf nicht zwingend Liveness töten. |
| OpenAPI ohne Review | Generierte Spezifikation ersetzt kein API-Design. |