blob: 750438a92d5ada74908f61d944f7207dc4031343 [file] [log] [blame]
= MicroProfile Fault Tolerance - Timeout
:index-group: MicroProfile
:jbake-type: page
:jbake-status: published
This is an example of how to use Microprofile `@Timeout` in TomEE.
[discrete]
== Timeout Feature
Fault Tolerance Timeout allow to specify how long a task can take to complete its execution and aborting it
in case of timeout. Timeout feature can be used along with other annotations to guide the execution and result of a task. +
Check the
https://download.eclipse.org/microprofile/microprofile-fault-tolerance-1.1/microprofile-fault-tolerance-spec.html#_timeout_usage[specification]
for more details.
Timeout annotation allows to configure :
* *value:* the timeout value
* *unit:* the timeout unit
[discrete]
== Example
[discrete]
=== Run the application
[source,text]
----
mvn clean install tomee:run
----
[discrete]
=== How does it work?
The method `statusOfDayByAccuWeather` fails when the threshold of `@Timeout` annotation is reached due to a long execution of
`longProcessingTask` method. To respond to the request nicely, a fallback method will take place to complete the request
successfully. The fallback method is determined by `@Fallback` annotation.
[source,java]
----
@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;
}
...
}
----
Day status call
[source,text]
----
GET http://localhost:8080/mp-faulttolerance-timeout/weather/day/status
----
Server log
[source,text]
----
WARNING AccuWeather task has been interrupted.
WARNING MetEireann fallback service has been requested due to AccuWeather timeout.
----
Response
[source,text]
----
Beautiful day!
----
[discrete]
=== Running the test
You can also try it out using the
link:src/test/java/org/superbiz/rest/WeatherServiceTest.java[WeatherServiceTest.java]
available in the project.
[source,text]
----
mvn clean test
----
----
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
----