文档告诉我,除某些例外外,HTTP 503响应被认为是可重试的。
根据经验,我知道feign.RetryableException包装了java.net.ConnectException和其他j.n.SocketExceptions,但是我看不到发生了什么。
还有其他像feign.RetryableException包装的java.net.SocketTimeoutException吗?
答案 0 :(得分:1)
您可以在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
,则它将被包装。
答案 1 :(得分:1)
在Feign中,IOExceptions
是自动包装的唯一例外。如果还有其他情况需要调用Feign的重试功能,请创建一个ErrorDecoder
并返回一个RetryableException
。有关示例,请参见Feign Documentation。