前言
上篇文章介绍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】俩个服务是轮询调用的
- 方法二
如果就像想把MyRibbonConfig放到启动类及启动类所在包的子包下,使用以下方法。
自定义一个空注解
public @interface ExcudeAnnotatio {
}
配置类上加自定义的注解
config.png启动类上加过滤注解
run.png
结果
同上
- 方法三
配置文件配置
不需要加任何配置类,在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指定的服务,如果不禁止,下面配置不生效
网友评论