【问题标题】:Spring Cloud Feign: Is Feign efficient enough compared with RestTemplate?Spring Cloud Feign:Feign与RestTemplate相比是否足够高效?
【发布时间】:2016-12-08 19:59:07
【问题描述】:

我快速浏览了Feign的源代码,发现Feign使用JDK的HttpUrlConnection发出HTTP请求并在请求完成时关闭它,而不使用连接池。我怀疑这种方式的效率。然后我看了Spring的RestTemplate的文档,上面写着RestTemplate可以切换到Apache Http Client或者OKHttp来发送HTTP请求:

注意:默认情况下,RestTemplate 依赖于标准 JDK 工具来建立 HTTP 连接。您可以通过 HttpAccessor.setRequestFactory(org.springframework.http.client.ClientHttpRequestFactory) 属性切换到使用不同的 HTTP 库,例如 Apache HttpComponents、Netty 和 OkHttp。

是不是说RestTemplate在性能上比Feign好?

【问题讨论】:

  • 你也可以插入okhttp来feign。
  • 如果我没记错的话,feignclient 有一个问题,它不允许缓存。 RestTemplate 允许你使用缓存。

标签: spring-cloud spring-cloud-feign


【解决方案1】:

老问题,但在这里可能值得一提的是,从 Spring 5 开始,RestTemplate 已被弃用,取而代之的是 WebClient。

【讨论】:

    【解决方案2】:

    与 Feign 相比,RestTemplate 充分利用了默认客户端性能(尽管映射到该客户端在 Java 11 中存在连接重置问题),但它在集成日志库的便利性以及更冗长和更难测试程序化方法。

    另一个支持 Feign 的优点是易于实现与 Hystrix 结合的后备策略,实现自定义 ErrorDecoder

    如果您想更深入地了解 Feign 的实现方式,请查看 this article

    说到性能,RestTemplate 的另一个注意点是它使用了 Java Servlet API,它基于 thread-per-request 模型。这意味着线程将阻塞,直到 Web 客户端收到响应,这可能导致性能下降并浪费内存和 CPU 周期等资源,特别是在与慢速服务通信时。另一方面,这对 Feign 来说不是问题,因为它可以用于异步客户端,而不是线程阻塞。

    【讨论】:

      猜你喜欢
      • 2023-03-15
      • 2013-09-18
      • 2010-10-15
      • 2018-10-07
      • 2018-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多