【问题标题】:How to manage Feign errors?如何管理 Feign 错误?
【发布时间】:2017-06-05 16:24:42
【问题描述】:

我们使用 Spring-bootSpring-cloudSpring-cloud-netflixSpring-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);
}

问题是,我们如何处理客户端可能引发的所有异常?我的意思是,我们如何才能捕捉到 NetworkExceptionTimeoutException 已被抛出?我们已经定义了自己的ErrorDecoder,但似乎这种“侦听器”仅在请求到达并返回响应时才有效(在我们的例子中来自authentication 客户端)。那么,我们如何管理其他异常呢?

最好的,

【问题讨论】:

    标签: spring-boot spring-cloud spring-cloud-netflix spring-cloud-feign


    【解决方案1】:

    错误解码器正在解码 HTTP 错误响应(500、404、401 等...)。异常会在客户端调用中冒泡,因此使用 try/catch 应该可以。

        try {
            return client.home();
        } catch (RuntimeException e) {
            e.printStackTrace();
            throw e;
        }
    

    【讨论】:

    • 没有更具体的异常要捕获吗?
    • 谢谢@spencergibb。它奏效了,关键是为了重用该代码,我们必须将其包含在内。我们所做的只是创建了一个充当装饰器的新类,然后它管理所有“常见”异常,例如超时等
    猜你喜欢
    • 2020-11-02
    • 2020-05-13
    • 2018-03-21
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 2023-03-14
    • 2016-12-17
    相关资源
    最近更新 更多