摘要来自官网一段文档
- Client feignClient: If Spring Cloud LoadBalancer is on the classpath, FeignBlockingLoadBalancerClient is used. If none of them is on the classpath, the default feign client is used.
译:ClientfeignClient:如果 Spring Cloud LoadBalancer 位于类路径上,FeignBlockingLoadBalancerClient则使用。如果它们都不在类路径上,则使用默认的 feign 客户端。
意思就是如果添加了 LoadBalancer Maven 依赖那么就会使用负载均衡(轮询,当然可以更改策略),如果没有则使用 Feign 默认的
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
实际中,用的是 Dubbo Spring Cloud 因为 loadbalancer 提供的负载均衡很少,只有 Nacos 和 随机 并不好用
# 更改负载均衡
# 随机
- 配置类 不需要增加 @Configuration 注解
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.loadbalancer.core.RandomLoadBalancer;
import org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer;
import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;
import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.core.env.Environment;
public class OpenFeignLoopConfig {
@Bean
public ReactorLoadBalancer<ServiceInstance> randomLoopBalancer(Environment environment, LoadBalancerClientFactory factory) {
//获取负载均衡客户端名称,微服务名称实例
String property = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
// 获取 property
//参数1:获取指定名称的所有provider实例列表
//参数2:指定要获取的提供者实例
ObjectProvider<ServiceInstanceListSupplier> lazyProvider = factory.getLazyProvider(property, ServiceInstanceListSupplier.class);
//这个微服务名称所有可用的列表,进行随机负载均衡
return new RandomLoadBalancer(lazyProvider, property);
}
}
- 开启随机负载均衡
@LoadBalancerClients(defaultConfiguration = OpenFeignLoopConfig.class)
@SpringBootApplication
public class Consumer8080Application {
public static void main(String[] args) {
SpringApplication.run(Consumer8080Application.class, args);
}
}
← OpenFeign局部配置 Gateway →