Ribbot
Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具.
Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。我们很容易使用Ribbon实现自定义的负载均衡算法。
比如在上一篇文章Eureka中就是用了Ribbon的负载均衡,在客户模块中提到了RestTemplate
RestTemplate
- 帮助文档
- 简单的说它就是调用第三方接口的工具类,比如:我们在项目中经常要使用第三方的 Rest API 服务,比如短信、快递查询、天气预报等等。这些第三方只要提供了 Rest Api ,你都可以使用
RestTemplate
来调用它们。 - 常用·方法 getForObject方法/getForEntity方法,返回对象为响应体中数据转化成的对象,基本上可以理解为Json 返回对象为ResponseEntity对象,包含了响应中的一些重要信息,比如响应头、响应状态码、响应体等
负载均衡的RestTemplate
在上一篇中我们使用注解 @LoadBalanced让 RestTemplate进行负载均衡的才可以调用Eureka中的暴露的接口,那问什么没有用到ribbon就已经实现的负载均衡呢,那我要ribbon有什么用呢?
打开maven依赖包
原来Eureka已经帮我集成的ribbon包。
Ribbon
Ribbon在工作时分成两步第一步先选择 EurekaServer ,它优先选择在同一个区域内负载较少的server.第二步再根据用户指定的策略,在从server取到的服务注册列表中选择一个地址。其中Ribbon提供了多种策略:比如轮询、随机和根据响应时间加权。
IRule:根据特定算法中从服务列表中选取一个要访问的服务
-
com.netflix.loadbalancer.RoundRobinRule 轮询
-
com.netflix.loadbalancer.RandomRule 随机
-
com.netflix.loadbalancer.RetryRule 先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内会进行重试,获取可用的服务
-
WeightedResponseTimeRule 对RoundRobinRule的扩展,响应速度越快的实例选择权重越大,越容易被
-
BestAvailableRule
会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
-
AvailabilityFilteringRule 先过滤掉故障实例,再选择并发较小的实例
-
ZoneAvoidanceRule 默认规则,复合判断server所在区域的性能和server的可用性选择服务器
我们定义一个规则测试一下就用RoundRobinRule轮询,这里要注意这个自定义配置类不能放在@ComponentScan所扫描的当前包下以及子包下,否则我们自定义的这个配置类就会被所有的Ribbon客户端所共享,达不到特殊化定制的目的了。
@Configuration
public class RunRobin {
@Bean
public IRule myRule(){
return new RoundRobinRule();
}
}
-
测试
启动 7001->8001->8002->80记得将之前的集群修改为单机哦
测试你会发现8001/8002会轮换进行调用,有兴趣可以尝试一下其他的。