Ribbon配置负载均衡策略

前言

上篇文章介绍Ribbon对一个服务进行负载,使用的默认的策略(轮询RoundRobinRule),下面介绍不同的服务如何使用不同的负载均衡策略。

Riddon负载均衡策略

负载策略详细说明

在SpringCloud中使用

1.方法一
创建配置类

@Configuration  
public class MyRibbonConfig {

    @Bean
    public IRule ribbonRule() {
        //随机策略
        return new RandomRule();
    }

}

启动类上加注解

@RibbonClient(name = "user-provider", configuration = MyRibbonConfig.class)

说明

上面的基础是又启动了俩个application name 为user-provider-2的服务,
MyRibbonConfig 不能放到【启动类】类的同级或是子目录下,因为这个类不能被@ComponentScan会扫描到,如果扫描到了,所有的服务都会使用定义的负载均衡策略,切记

测试

@GetMapping("/test")
    public void test() {
        ServiceInstance instance = this.loadBalancerClient.choose("user-provider");
        System.out.println(
                "---------------: " + instance.getServiceId() + ": " + instance.getHost() + ": "
                        + instance
                        .getPort());
//        System.out.println(instance.toString());

        ServiceInstance instance1 = this.loadBalancerClient.choose("user-provider-2");
        System.out.println(
                "++++++++++++++++: " + instance1.getServiceId() + ": " + instance1.getHost() + ": "
                        + instance1
                        .getPort());
    }

结果


result.png

我们可以看到【user-provider】俩个服务是随机调用的,【user-provider-2】俩个服务是轮询调用的

  1. 方法二
    如果就像想把MyRibbonConfig放到启动类及启动类所在包的子包下,使用以下方法。
    自定义一个空注解
public @interface ExcudeAnnotatio {

}

配置类上加自定义的注解

config.png

启动类上加过滤注解


run.png

结果
同上

  1. 方法三
    配置文件配置
    不需要加任何配置类,在application.yml中加
user-provider:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

禁用Eureka

ribbon:
  eureka:
    enabled: false

user-provider:
  ribbon:
    listOfServers: localhost:8080

user-provider-2:
  ribbon:
    listOfServers: localhost:8083,localhost:8082

如果禁止了Eureka,只会访问ribbon指定的服务,如果不禁止,下面配置不生效

参考资料

推荐阅读更多精彩内容