【问题标题】:Why is the Ribbon HttpClient used to back RestTemplate in Spring Cloud Netflix?为什么在 Spring Cloud Netflix 中使用 Ribbon HttpClient 来支持 RestTemplate?
【发布时间】:2023-03-02 21:33:01
【问题描述】:

所以。我们开始使用 Spring Cloud(和 Spring Cloud Netflix)库,以在基于 Spring Boot 的服务中获得服务发现和客户端负载平衡。部分原因是我也错误地,尽管它也支持在这样的设置中似乎非常重要的重试。

Another question 解释说实际上并非如此。很公平,但文件可能已经很清楚了。至少可以让我免于一些错误的假设。

但是在调查了代码之后。我无法弄清楚为什么要使用 Ribbon HttpClient?负载均衡器支持目前是通过 Ribbon 实现的。

但是执行实际 HTTP 请求的代码仅通过 Spring Cloud 抽象 API 处理该请求。因此,当它也可以使用 Spring RestTemplate 默认使用的实现时,专门使用来自 Ribbon 的(现已弃用的)HttpClient 似乎毫无意义。

如果它的行为类似于任何客户端 RestTemplate 被配置为使用或实际行为类似于 Ribbon 客户端并支持配置它以执行应该能够执行的操作,似乎会更容易理解它的行为(比如重试)。

【问题讨论】:

  • Netflix 团队特别要求。
  • 不太明白这个。 Netflix 团队特别要求您为 Jersey 调用一个已弃用的包装器,该包装器调用 Apache HttpClient 而不是使用不同的 Spring ClientHttpRequestFactory 来获取实际的 HTTP 客户端?据我所知,RibbonClientHttpRequestFactory 需要做的就是解析服务实例地址。

标签: spring-boot spring-cloud netflix


【解决方案1】:

克里斯托弗,

我也在负载平衡的 RestTemplate 中寻找重试逻辑,结果发现 RestClient(即使它已被弃用)确实支持故障转移,对请求工厂的小改动似乎对我有用.

Here is a link

【讨论】:

  • 不错。无论如何,我们实际上在 RestTemplate 上有一个动态代理 - 以解决不同的问题。所以我最终在调用周围添加了一个 Spring Retry RetryTemplate。这是目前的解决方案。
猜你喜欢
  • 1970-01-01
  • 2017-12-29
  • 1970-01-01
  • 2021-04-13
  • 2019-01-08
  • 1970-01-01
  • 1970-01-01
  • 2021-09-06
  • 2015-02-12
相关资源
最近更新 更多