mvn clean install tomee:run
Tolerancia a fallos (Fault Tolerance) en MicroProfile - Timeout (Tiempo de espera)
Este es un ejemplo de como usar Microprofile @Timeout
en TomEE.
Funcionalidad de tiempo de espera (Timeout)
Fault Tolerance Timeout
permite especificar cuánto tiempo puede tomar una tarea en completar su ejecución y abortarla en caso que tarde más del tiempo especificado. La funcionalidad de Timeout puede ser usada en conjunto con otras anotaciones para guiar la ejecución y resultado de una tarea. Mira la
especificación
para mas detalles.
La anotación @Timeout
permite configurar:
-
value: el valor del tiempo de espera
-
unit: la unidad del tiempo de espera
Ejemplo
Ejecuta la aplicación
Como funciona esto?
El método statusOfDayByAccuWeather
falla cuando se alcanza el umbral de la
anotación @Timeout
debido a una larga ejecución del método
longProcessingTask
. Para responder bien a la solicitud, se ejecutará un
método alternativo para completar la solicitud exitosamente. El método
alternativo está determinado por la anotación @Fallback
.
@RequestScoped
public class WeatherGateway {
private static final Logger LOGGER = Logger.getLogger(WeatherGateway.class.getName());
@Timeout(50)
@Fallback(fallbackMethod = "statusOfWeekByMetEireann")
public String statusOfDayByAccuWeather(){
return longProcessingTask();
}
public String statusOfWeekByMetEireann(){
LOGGER.log(Level.WARNING, "MetEireann backup service has been requested due to AccuWeather timeout");
return "Beautiful day";
}
private String longProcessingTask(){
try {
Thread.sleep(80);
} catch (InterruptedException e) {
LOGGER.log(Level.WARNING,"AccuWeather task has been interrupted.");
}
return null;
}
...
}
Llamada al estado del día
GET http://localhost:8080/mp-faulttolerance-timeout/weather/day/status
Logs en el Servidor
WARNING AccuWeather task has been interrupted.
WARNING MetEireann fallback service has been requested due to AccuWeather timeout.
Respuesta HTTP
Beautiful day!
Ejecutando las pruebas
También puedes probarlo usando el WeatherServiceTest.java disponible en el proyecto.
mvn clean test
[INFO] Results: [INFO] [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0