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.