Spring Cloud 2022 负载均衡器与 Feign 客户端的兼容性

问题描述 投票:0回答:1

将项目升级到 Spring Boot 3.1.3 后,我们的自定义负载平衡遇到了问题。我们使用 feign 客户端通过 spring 的负载平衡和开放 feign 库连接到我们的应用程序。以下类是我们用来设置假负载平衡的类。

@LoadBalancerClient(name = "example-service", configuration = CustomLoadBalancerConfiguration.class)
@FeignClient(name = "example-service", configuration = CustomRequestInterceptorConfiguration.class)
public interface ExampleServiceClient
{
}
@Slf4j
public class CustomLoadBalancerConfiguration
{
    @Bean
    public ReactorServiceInstanceLoadBalancer customLoadBalancer()
    {
       //logic here
    }
}

我们遇到的问题是,我们注意到 CustomRequestInterceptorConfiguration bean 在

@FeignClient
注释中实例化,但我们没有看到 CustomLoadBalancerConfiguration bean 在
@LoadBalancerClient
注释中实例化。我们做了一些调查,发现在我们使用 Spring Boot 和 Spring Cloud 的之前版本中,当第一次在运行时调用 feign 客户端时,CustomLoadBalancerConfiguration 中的 bean 就会被实例化。在新版本中,这个自定义负载平衡 bean 不再被实例化,因此我们的自定义负载平衡规则不会被执行,而是执行 spring 的默认循环算法。有谁知道新的 Spring Cloud 版本是否弃用了与 feign 客户端一起使用的
@LoadBalancerClient
注释?我们在这里查看了 Spring Cloud 2022 发行说明 https://github.com/spring-cloud/spring-cloud-release/wiki/Spring-Cloud-2022.0-Release-Notes 并发现了这样的声明:“AsyncRestTemplate 已被删除在 Spring Framework 6 中,因此 LoadBalancer 的自动配置已被删除”。这是他们试图推动每个人现在使用负载平衡 Web 客户端的方式还是我们只是在这个较新版本的 spring 中缺少配置?

我们的依赖如下:

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-dependencies</artifactId>
  <version>2022.0.3</version>
</dependency>
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-loadbalancer</artifactId>
  <version>2022.0.3</version>
</dependency>
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-openfeign</artifactId>
  <version>2022.0.3</version>
</dependency>
spring spring-boot spring-cloud spring-cloud-feign spring-cloud-loadbalancer
1个回答
0
投票

您是否尝试过将 @LoadBalancerClient 注释移至主应用程序类?

我遇到了类似的问题,这似乎解决了。

© www.soinside.com 2019 - 2024. All rights reserved.