Timeout
For introduction, see How to Watch for Timeouts.
Description
If a guarded method takes too long, the caller will get a TimeoutException.
If the guarded method is not @Asynchronous or @AsynchronousNonBlocking, the thread executing the method is interrupted.
Note that interruption requires cooperation from the executing code (for example, it must not swallow InterruptedException).
In other words, it is not guaranteed that interrupting the method will actually make it stop.
If the guarded method is @Asynchronous or @AsynchronousNonBlocking, timeout is always signalled correctly, but there is no cancellation.
Even after timeout, the asynchronous action will keep running; its eventual result is just ignored.
Interactions with Other Strategies
See How to Use Multiple Strategies for an overview of how fault tolerance strategies are nested.
If @Fallback is used with @Timeout, the fallback method or handler may be invoked if a TimeoutException is thrown, depending on the fallback configuration.
If @Retry is used with @Timeout, each retry attempt is processed by the timeout as an independent invocation.
If TimeoutException is thrown, the execution may be retried, depending on how retry is configured.
If @CircuitBreaker is used with @Timeout, the circuit breaker is checked before enforcing the timeout.
If enforcing the timeout results in TimeoutException, this may be counted as a failure, depending on how the circuit breaker is configured.
If @RateLimit is used with @Timeout, the rate limit is enforced before enforcing the timeout.
Metrics
Timeout exposes the following metrics:
Name |
|
Type |
|
Unit |
None |
Description |
The number of times the timeout logic was run. This is usually once per method call, but may be zero times if the circuit breaker or rate limit prevents execution or more than once if the method is retried. |
Tags |
|
Name |
|
Type |
|
Unit |
|
Description |
Histogram of execution times for the method |
Tags |
|
See the Metrics reference guide for general metrics information.