【问题标题】:What are the advantages and disadvantages of using feign over RestTemplate使用 feign 比 RestTemplate 有什么优缺点
【发布时间】:2018-04-03 16:57:34
【问题描述】:

我知道 Feign 是声明性的,因此它为开发人员抽象了很多东西。但是,什么时候应该选择一个而不是另一个?尽管 feign 是声明性的,但它与 oAuth 存在严重问题。在 Feign 上使用 RestTemplate 有哪些注意事项

【问题讨论】:

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


    【解决方案1】:

    Feign 允许您抽象调用 REST 服务的机制。一旦你配置和注解了 Feign 接口,你就可以通过一个简单的 Java 函数调用来调用一个 REST 服务。进行 REST 调用的实际实现由 Feign 在运行时处理。这意味着可以在不更改业务逻辑代码的情况下配置实现。

    只需更改 Java 中的 Feign 配置或使用属性,您就可以添加编码/解码、日志记录和更改 REST 调用实现库。这一切只通过配置完成,调用服务的业务逻辑保持不变。

    由于 Feign 使用标准 Java 接口,因此在单元测试期间也很容易模拟它们。

    【讨论】:

      【解决方案2】:

      有一定的优势。

      1.URL 不是硬编码的。

      2.你不必为 feign 编写单元测试用例,因为没有要测试的代码,但是你必须编写集成测试。

      3.我们可以使用Eureka Client ID代替URL。

      4.Feign 处理实际代码。

      5.Feign 自动与 Ribbon 和 Eureka 集成。

      6.Feign 提供了一种非常简单的方式来调用 RESTful 服务。

      【讨论】:

      • 虽然所有优点都有效,但我看到的 Feign 的一个缺点是它不支持基于缓存控制标头的缓存。
      • RestTemplate 可以使用@LoadBalanced 完成#3。
      • 答案不完整
      • 请编辑并随时添加更多答案。
      【解决方案3】:

      使用Feign 优于RestTemplate 的优点之一是,我们不需要编写任何实现来调用其他服务。所以有没有 需要编写任何单元测试,因为首先没有要测试的代码。但是,建议我们编写集成测试。

      【讨论】:

        【解决方案4】:

        使用 Feign-clients 而不是 rest-templates 有很多优点。我将在下面列出。

        1. 开发人员不必担心实施。只是为了创建抽象的 Feign 接口和少量注释 - 声明式 原则。 (如果您想要自定义配置,那么它将保持 一些代码)

        2. 使用 Spring Cloud Eureka,Ribbon 客户端负载均衡器将配备 Feign 客户端。

        3. 无需担心单元测试,因为您无需测试任何实现。 (有争议)

        4. 支持 Feign 注解和 JAX-RS 注解。

        5. 与 Spring Cloud 高度兼容且易于配置(特别是与 Eureka 服务器注册表)

        6. 允许通过 @Configuration 类或应用程序属性进行 Feign 客户端配置。

        7. 允许我们添加拦截器。 (通过@Configuration 或应用程序属性添加拦截器。或者可以使用 Spring Cloud 也提供了拦截器。例子 - BasicAuthRequestInterceptor)

        8. Hystrix 支持回退机制。

        9. 记录

        10. 错误处理

        Feign 是一个不错的选择,如果您对 JPA 及其解决查询的方式着迷,那么 Feign 就是您的工具。 Feign 将完美地处理您的服务器请求。

        【讨论】:

          【解决方案5】:

          RestTemplate 用于进行同步调用。使用 RestTemplate 时,URL 参数以编程方式构造,并将数据发送到其他服务。在更复杂的场景中,我们将不得不了解 RestTemplate 提供的 HTTP API 的详细信息,甚至是更低级别的 API

          Feign 是一个 Spring Cloud Netflix 库,用于为基于 REST 的服务调用提供更高级别的抽象。 Spring Cloud Feign 遵循声明性原则。在使用 Feign 时,我们在客户端编写声明式 REST 服务接口,并使用这些接口对客户端进行编程。开发人员不必担心实现...

          【讨论】:

            猜你喜欢
            • 2020-03-30
            • 1970-01-01
            • 1970-01-01
            • 2010-10-31
            • 1970-01-01
            • 2010-09-08
            • 1970-01-01
            • 1970-01-01
            • 2011-01-20
            相关资源
            最近更新 更多