如何管理 Feign 错误?
How to manage Feign errors?
我们正在使用 Spring-boot 与 Spring-cloud 和 Spring-cloud-netflix 与 Spring-cloud-feign.
我们正在创建我们的网关应用程序,它在 Feign
的帮助下将尝试与我们的 authentication
微服务通信以验证其凭据。在这里你可以看到我们 Feign authentication
客户端的例子:
@FeignClient(value="auth", configuration = AuthClientConfiguration.class)
public interface AuthClient {
@RequestMapping(method = RequestMethod.GET, value = "/tokens", consumes = MediaType.APPLICATION_JSON_VALUE)
Single<Session> getSession(@RequestHeader("Authorization") String token);
}
问题是,我们如何处理客户端可能引发的所有异常?我的意思是,我们如何才能捕捉到 NetworkException
或 TimeoutException
已被抛出?我们已经定义了我们自己的 ErrorDecoder
但看起来这个 "kind of listener" 只在请求到达并且响应返回时才起作用(在我们的例子中来自 authentication
客户端)。那么,我们如何管理其他异常呢?
最佳,
错误解码器正在解码 HTTP 错误响应(500、404、401 等)。客户端调用中会出现异常,因此使用 try/catch
应该可行。
try {
return client.home();
} catch (RuntimeException e) {
e.printStackTrace();
throw e;
}
我们正在使用 Spring-boot 与 Spring-cloud 和 Spring-cloud-netflix 与 Spring-cloud-feign.
我们正在创建我们的网关应用程序,它在 Feign
的帮助下将尝试与我们的 authentication
微服务通信以验证其凭据。在这里你可以看到我们 Feign authentication
客户端的例子:
@FeignClient(value="auth", configuration = AuthClientConfiguration.class)
public interface AuthClient {
@RequestMapping(method = RequestMethod.GET, value = "/tokens", consumes = MediaType.APPLICATION_JSON_VALUE)
Single<Session> getSession(@RequestHeader("Authorization") String token);
}
问题是,我们如何处理客户端可能引发的所有异常?我的意思是,我们如何才能捕捉到 NetworkException
或 TimeoutException
已被抛出?我们已经定义了我们自己的 ErrorDecoder
但看起来这个 "kind of listener" 只在请求到达并且响应返回时才起作用(在我们的例子中来自 authentication
客户端)。那么,我们如何管理其他异常呢?
最佳,
错误解码器正在解码 HTTP 错误响应(500、404、401 等)。客户端调用中会出现异常,因此使用 try/catch
应该可行。
try {
return client.home();
} catch (RuntimeException e) {
e.printStackTrace();
throw e;
}