电商商城定制开发本文介绍如何在springcloud电商商城定制开发中通过自定义配置,实现修改LoadBalancer的默认配置(默认策略为轮询)。
从springcloud2020版本开始默认移除了对的依赖,官方默认推荐使用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的服务接口,验证随机访问策略是否生效。