feign.RetryableException 包含哪些异常?
What exceptions does feign.RetryableException wrap?
文档告诉我 HTTP 503 响应被认为是可重试的,一些例外也是如此。
根据经验,我知道 feign.RetryableException 包裹着 java.net.ConnectException,另一个包裹着 j.n.SocketExceptions,但我看不出这是在哪里发生的。
其他人像java.net.SocketTimeoutException被feign.RetryableException包裹了吗?
您可以查看feign.SynchronousMethodHandler
中的代码:
try {
response = client.execute(request, options);
} catch (IOException e) {
if (logLevel != Logger.Level.NONE) {
logger.logIOException(metadata.configKey(), logLevel, e, elapsedTime(start));
}
throw errorExecuting(request, e);
}
static FeignException errorExecuting(Request request, IOException cause) {
return new RetryableException(
format("%s executing %s %s", cause.getMessage(), request.httpMethod(), request.url()),
request.httpMethod(),
cause,
null);
}
所以如果异常扩展 IOException
那么它将被包装。
在 Feign 中,IOExceptions
是唯一自动包装的异常。如果还有其他情况需要调用 Feign 的重试功能,请创建一个 ErrorDecoder
和 return 一个 RetryableException
。有关示例,请参阅 Feign Documentation.
文档告诉我 HTTP 503 响应被认为是可重试的,一些例外也是如此。
根据经验,我知道 feign.RetryableException 包裹着 java.net.ConnectException,另一个包裹着 j.n.SocketExceptions,但我看不出这是在哪里发生的。
其他人像java.net.SocketTimeoutException被feign.RetryableException包裹了吗?
您可以查看feign.SynchronousMethodHandler
中的代码:
try {
response = client.execute(request, options);
} catch (IOException e) {
if (logLevel != Logger.Level.NONE) {
logger.logIOException(metadata.configKey(), logLevel, e, elapsedTime(start));
}
throw errorExecuting(request, e);
}
static FeignException errorExecuting(Request request, IOException cause) {
return new RetryableException(
format("%s executing %s %s", cause.getMessage(), request.httpMethod(), request.url()),
request.httpMethod(),
cause,
null);
}
所以如果异常扩展 IOException
那么它将被包装。
在 Feign 中,IOExceptions
是唯一自动包装的异常。如果还有其他情况需要调用 Feign 的重试功能,请创建一个 ErrorDecoder
和 return 一个 RetryableException
。有关示例,请参阅 Feign Documentation.