mvn clean install tomee:run
Tolerância a falhas (Fault Tolerance) no MicroProfile - Timeout (Tempo de espera)
Este é um exemplo de como usar o Microprofile @Timeout
no TomEE.
Funcionalidade de tiempo de espera (Timeout)
Fault Tolerance Timeout
permite especificar quanto tempo pode tomar uma tarefa em completar sua execução e abortá-lo caso demore mais que o tempo especificado. A funcionalidade de Timeout pode ser usada em conjunto com outras anotações para guiar a execução e resultado de uma tarefa. Olhe para o
especificación
para mais detalles.
A anotação @Timeout
permite configurar:
-
value: o valor do tempo de espera
-
unit: a unidade do tempo de espera
Exemplo
Execute o aplicativo
Como funciona isto?
O método statusOfDayByAccuWeather
falha quando se atinge o limiar da
anotação @Timeout
devido a uma larga execução do método
longProcessingTask
. Para responder bem a solicitação, se executará um
método alternativo para completar a solicitação exitosamente. O método
alternativo está determinado pela anotação @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;
}
...
}
Chamada para o estado do dia
GET http://localhost:8080/mp-faulttolerance-timeout/weather/day/status
Logs do Servidor
WARNING AccuWeather task has been interrupted.
WARNING MetEireann fallback service has been requested due to AccuWeather timeout.
Resposta HTTP
Beautiful day!
Executando os testes
Você também pode experimentá-lo usando o WeatherServiceTest.java disponível no projeto.
mvn clean test
[INFO] Results: [INFO] [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0