MicroProfile (https://microprofile.io/) enthält u. a. den Baustein MP Fault Tolerance, mit dem auf sehr einfache Weise die bekannten Stability Patterns in JEE/MicroProfile-Anwendungen eingebaut werden können.
Bei verteilten Anwendungen (Microservices) – aber nicht nur dort – können Fehler durch nicht erreichbare oder nicht funktionierende Anwendungsteile entstehen. Soll dann nicht wie bei einem Dominoeffekt die Gesamtanwendung betroffen sein, muss der aufrufende Teil resilient sein, d. h. durch Wiederholungen oder Ersatzaufrufe zu einem verträglichen Ergebnis kommen.
MP Fault Tolerance enthält Interzeptoren mit den im Folgenden beschriebenen Bindings, mit denen im Fehlerfall gewünschte Ausweichaktionen initiiert werden können.
Nochmals probieren
@Retry
führt beim Auftauchen einer Exception zum wiederholten Aufruf der Methode:
@Retry(maxRetries = 4) public int doSomethingWithRetry() {
Mit diversen Parametern von @Retry
kann bestimmt werden, welche Exceptions die Wiederholungen auslösen sollen, wie lange oder wie oft es versucht werden soll und welche Wartezeit zwischen den Wiederholungen eingehalten werden soll.
Programmierte Ungeduld
Mit @Timeout
kann eine Obergrenze für die Ausführungszeit einer Methode angegeben werden:
@Timeout(1000) public int doSomethingWithTimeout() {
Rückstellende Sicherung
Circuit Breaker ist ein Pattern, das bei zu häufigen Fehlern (=Exceptions) “den Schalter öffnet”, d. h. die betroffene Methode für eine gewisse Zeit nicht mehr aufruft und statt dessen eine dementsprechende Exception wirft. Nach Ablauf der Wartezeit wird der Schalter probeweise wieder geschlossen.
MP Fault Tolerance bietet dazu @CircuitBreaker
an:
@CircuitBreaker(failureRatio = 0.25, requestVolumeThreshold = 10) public int doSomethingWithCircuitBreaker() {
Mit Parametern kann bestimmt werden, was “zu häufig” sein soll und wann der Schalter nach Öffnung wieder geschlossen wird.
Ersatzhandlung
Sind Fehler (=Exceptions) für den Aufrufer nicht OK, kann mit @Fallback
eine Ersatzaktion definiert werden:
@Fallback(fallbackMethod = "return42") public int doSomethingWithFallback() { ... } private int return42() { return 42;
Plattformen
MicroProfile Fault Tolerance wird u. a. von folgenden JEE-Servern unterstützt:
- OpenLiberty (mit aktiviertem Feature
mpFaultTolerance-2.0
). - Payara.
WildFly wird MP Fault Tolerance voraussichtlich ab der Version 19 unterstützen
Die genannten Annotationen befinden sich bspw. in der Maven-Dependency org.eclipse.microprofile.fault-tolerance:microprofile-fault-tolerance-api
(derzeit in Version 2.0
).
Demo
In https://github.com/GEDOPLAN/microprofile-demo/tree/master/microprofile-fault-tolerance finden Sie ein Beispielprojekt mit einem Service, der die oben gezeigten Annotationen enthält und über Rest Endpoints aufgerufen werden kann. Die Anwendung kann als WAR-File auf einen der genannten Server deployt werden. Alternativ können über vorkonfigurierte Maven-Profile Docker-Images zum direkten Ausprobieren erstellt werden.
Bis bald – vielleicht auch in einem unserer Trainings in Berlin, Frankfurt, Bielefeld, Köln oder bei Ihnen!
Schauen Sie sich doch mal unseren neuen Kurs zum Thema an: JEE und MicroProfile mit Quarkus