Quarkus & MicroProfile
Cloud-native Java, schnelle Starts, Standards, Fault Tolerance, Config, Health und OpenAPI.
Quarkus richtig verstehen
Quarkus optimiert Java für Container- und Cloud-Native-Szenarien. Es arbeitet stark zur Build-Zeit, unterstützt viele Standards aus Jakarta EE und MicroProfile und ist besonders interessant, wenn Startzeit, Speicherverbrauch, Developer Loop und native Images wichtig sind. Trotzdem bleiben Architekturprinzipien gleich: Fachlogik entkoppeln, Adapter schneiden, Fehlerverträge definieren.
@Path("/orders")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class OrderResource {
@Inject PlaceOrderUseCase placeOrder;
@POST
@Transactional
public Response create(@Valid PlaceOrderRequest request) {
OrderId id = placeOrder.handle(request.toCommand());
return Response.created(URI.create("/orders/" + id.value())).build();
}
}
MicroProfile als Microservice-Standardset
MicroProfile ergänzt Jakarta EE-orientierte APIs um typische Microservice-Themen: Config, REST Client, Fault Tolerance, Health, Metrics/Telemetry, OpenAPI und JWT. Das Ziel ist nicht, jedes Problem mit Annotationen zu lösen, sondern Standardverhalten für wiederkehrende Betriebssituationen bereitzustellen.
@ApplicationScoped
public class PartnerRatingClient {
@Inject
@RestClient PartnerApi partnerApi;
@Retry(maxRetries = 3, delay = 250)
@Timeout(1000)
@Fallback(fallbackMethod = "fallbackRating")
public PartnerRating loadRating(String partnerId) {
return partnerApi.rating(partnerId);
}
PartnerRating fallbackRating(String partnerId) {
return PartnerRating.unknown(partnerId);
}
}
| Annotation | Wirkung | Worauf achten |
|---|---|---|
| @Retry | Wiederholt einen fehlgeschlagenen Aufruf | Nur bei idempotenten oder sicheren Operationen |
| @Timeout | Begrenzt Wartezeit | Timeouts pro Partner und Use Case bewusst setzen |
| @Fallback | Definiert Ersatzverhalten | Fallback darf keine falsche Fachlichkeit vortäuschen |
| @CircuitBreaker | Schützt vor dauerhaften Partnerfehlern | Monitoring und Recovery-Verhalten planen |
Native Image einordnen
Native Images können Startzeit und Speicherverbrauch verbessern, bringen aber Build-Komplexität, Reflection-Konfiguration und Debugging-Besonderheiten mit. Sie sind wertvoll für Serverless, elastische Workloads oder sehr dichte Container-Landschaften, aber nicht automatisch die beste Wahl für jedes Enterprise-System.