一、简介
SpringCloud Ribbon是基于Netflix Ribbon实现的一个客户端负载均衡和服务调用的客户端组件。使用上只需在配置文件中加入LoadBalancer,具有完善的连接、超时、重试等配置,也可基于Ribbon实现自定义的负载均衡算法。未来Spring将使用LoadBalancer来代替Ribbon.
Ribbon实际上就是RestTemplate接入了负载均衡。
github地址:https://github.com/Netflix/ribbon/wiki/Getting-Started
集中式LB:
在服务的调用方和提供方之间建立独立的LB设施,如Nginx,由该设施负责转发至服务的提供方。
进程内LB:
将LB集成到消费方,消费方从注册中心获知有哪些地址可用,然后依据一定算法选择一个调用。Ribbon就属于进程内LB。
二、Ribbon引入
在引入Eureka Client的时候,已经引入在eureka的内部引入了Ribbon。
1 | <dependency> |
1 | <!-- Eureka已经引入了Ribbon--> |
三、使用
只需要在RestTemplate的配置类中创建实例的方法上添加 @LoadBalanced
注解
1 | // 配置类注解 |
四、RestTemplate使用
restTemplate.postForObject
直接返回响应体的Json数据
restTemplate.getForEntity
返回响应实体 ResponseEntity 对象,可获得响应实体,响应码等信息。
- entity.getStatusCode() 获取状态码
- entity.getBody() 获取响应体
- entity.getHeaders() 获取HTTP头信息
五、Ribbon自带的负载均衡规则
核心组件为 IRule。
com.netflix.loadbalancer.RoundRobinRule:
轮询
com.netflix.loadbalancer.RandomRule:
随机
com.netflix.loadbalancer.RetryRule:
先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内会进行重试
WeightedResponseTimeRule :
对RoundRobinRule的扩展,响应速度越快的实例选择权重越大,越容易被选择
BestAvailableRule :
会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
AvailabilityFilteringRule :
先过滤掉故障实例,再选择并发较小的实例
ZoneAvoidanceRule:
默认规则,复合判断server所在区域的性能和server的可用性选择服务器
六、负载均衡规则替换
在项目启动类所在目录所在目录新建同级目录,如com.beyonderwei.ribbonrule,在改目录下新建MySelfRule规则类。(如果创建在@ComponentScan可以扫描到的地方会导致所有的项目均使用了该规则)
1
2
3
4
5
6
7
public class MySelfRule {
public IRule myRule(){
return new RandomRule();//定义为随机
}
}主启动类添加 RibbonClient 注解
1
"注册的微服务的名字",configuration = MyRule.class) (name =
...
...
本文为作者原创文章,未经作者允许不得转载。