本文介绍如何在springcloud中通过自定义配置,实现修改LoadBalancer的默认负载均衡策略配置(默认策略为轮询)。
从springcloud2020版本开始默认移除了对Ribbon的依赖,官方默认推荐使用Spring Cloud Loadbalancer正式替换Ribbon,并成为了Spring Cloud负载均衡器的唯一实现。所以以后主要学习Loadbalancer的相关配置和使用。
本例使用的springcloud版本为:2021.0.3,springboot版本为:2.6.8
1、默认负载均衡策略
Loadbalancer默认实现了如下两种负载均衡策略:
- RandomLoadBalancer - 随机分配策略
- (默认) RoundRobinLoadBalancer - 轮询分配策略
2、自定义负载均衡策略
2.1 创建配置类
如果想要修改默认的负载均衡策略,比如采用随机分配策略。则可以如下创建配置类,不需要添加@Configuration注解。
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;
/**
* @Description: 负载均衡配置
* @Author: knight
* @Date: Created in 2022/7/19 10:30
*/
public class LoadBalancerConfig {
@Bean
public ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment, LoadBalancerClientFactory loadBalancerClientFactory){
String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);
}
}
本文介绍如何在springcloud中通过自定义配置,实现修改LoadBalancer的默认负载均衡策略配置(默认策略为轮询)。
从springcloud2020版本开始默认移除了对Ribbon的依赖,官方默认推荐使用Spring Cloud Loadbalancer正式替换Ribbon,并成为了Spring Cloud负载均衡器的唯一实现。所以以后主要学习Loadbalancer的相关配置和使用。
本例使用的springcloud版本为:2021.0.3,springboot版本为:2.6.8
1、默认负载均衡策略
Loadbalancer默认实现了如下两种负载均衡策略:
- RandomLoadBalancer - 随机分配策略
- (默认) RoundRobinLoadBalancer - 轮询分配策略
2、自定义负载均衡策略
2.1 创建配置类
如果想要修改默认的负载均衡策略,比如采用随机分配策略。则可以如下创建配置类,不需要添加@Configuration注解。
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;
/**
* @Description: 负载均衡配置
* @Author: knight
* @Date: Created in 2022/7/19 10:30
*/
public class LoadBalancerConfig {
@Bean
public ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment, LoadBalancerClientFactory loadBalancerClientFactory){
String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);
}
}
2.2 修改主启动类
在主启动类上添加注解@LoadBalancerClient,指定哪个服务(本示例为PAYMENT-SERVER)使用新的负载均衡策略:
@EnableEurekaClient
@SpringBootApplication
@LoadBalancerClient(name = "PAYMENT-SERVER", configuration = LoadBalancerConfig.class)
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication .class, args);
}
}
2.3 测试
启动客户端服务,然后访问服务名称为PAYMENT-SERVER的服务接口,验证随机访问策略是否生效。