将项目升级到 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>
您是否尝试过将 @LoadBalancerClient 注释移至主应用程序类?
我遇到了类似的问题,这似乎解决了。