feign.RetryableException包装哪些异常?

时间:2019-08-22 15:43:12

标签: java hystrix spring-cloud-feign feign

文档告诉我,除某些例外外,HTTP 503响应被认为是可重试的。

根据经验,我知道feign.RetryableException包装了java.net.ConnectException和其他j.n.SocketExceptions,但是我看不到发生了什么。

还有其他像feign.RetryableException包装的java.net.SocketTimeoutException吗?

2 个答案:

答案 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