基于springcloud3.0.1版本Loadbalancer切换默认负载均衡策略

Spring Cloud LoadBalancer默认负载均衡策略切换

    • 前置说明
    • 官网说明
    • 代码说明

前置说明

我是在学习使用比较新版的springcloud3.0.1GA的时候,遇到一个问题,springcloud加入了一个新模块-Loadbalancer来替代ribbon,有两种负载均衡模式(轮询和随机),默认是用随机轮询,假如想使用随机或者自定义负载均衡策略,就不能按照以前使用ribbon的模式(注入IRule类,必须引入ribbon依赖),那么如果我使用Loadbalancer的随机负载均衡,要怎么设置呢?官网给出比较详细的方法,由此记录一下,有问题欢迎大佬们指出。

官网说明

显然官方写了一个切换成随机负载均衡的例子,我们拷贝过来即可,主要是@Bean下面的方法。
基于springcloud3.0.1版本Loadbalancer切换默认负载均衡策略_第1张图片

注: 图片来自于spring官网

代码说明

第一,把官方的@Bean方法拷贝到自己的配置类,这里我是MyConfig.java

package com.flying.eruekaclient.config;

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.context.annotation.Configuration;
import org.springframework.core.env.Environment;

/**
 * @Author CJJ
 * @Deseription 配置类
 * @Date 2021/2/21 16:25
 * @Version 1.0
 **/
@Configuration
public class MyConfig {

    /**
     * 自定义ribbon负载均衡策略,作用于2.2.7版本(新版3.0要引入ribbon依赖)
     * @return
     */
    /*@Bean
    public IRule myRule(){
        return new RandomRule();
    }*/

    /**
     * 切换为随机负载均衡(官方写法)
     * @param environment
     * @param loadBalancerClientFactory
     * @return
     */
    @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);
    }
}

第二,在启动类,使用@LoadBalancerClient或者@LoadBalancerClients注解,加载自己的配置类,由此切换loadBalancer默认的负载均衡策略

package com.flying.eruekaclient;

import com.flying.eruekaclient.config.MyConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClients;

@SpringBootApplication
@LoadBalancerClients(defaultConfiguration = {MyConfig.class})
public class EruekaClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(EruekaClientApplication.class, args);
    }

}

最后达到随机负载均衡的效果
基于springcloud3.0.1版本Loadbalancer切换默认负载均衡策略_第2张图片

你可能感兴趣的:(springcloud,springboot,java,spring,boot,java)