一、什么是SpringCloudRibbon?
SpringCloudRibbon是一套基于NetflixRibbon实现的客户端负载均衡工具框架。Ribbon原是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用,在配置文件中列出负载均衡所有的服务模块,Ribbon会自动的帮助你根据某种规则去连接这些服务。目前官网Ribbon已经进入维护模式,但是用较多,仍需要学习。
负载均衡分为集中式负载均衡(比如nginx)和进程内负载均衡(比如ribbon),Nginx是服务器负载均衡,客户端的所有请求都会经过Nginx,由Nginx实现转发,而Ribbon是本地(进程内)负载均衡,消费者在调用微服务接口的时候,会在注册中心上获取注册信息服务列表后缓存到JVM本地,在本地实现rpc远程调用,因此Ribbon是寄宿于服务消费者模块的,其架构如下
二、Ribbon使用
1、引入jar包:正常情况下,引入新的工具需要引入新的坐标,使用Ribbon同样需要引入jar包,但是在使用较新版本Eureka组件时不需要引入,因为该组件默认内部整合了Ribbon组件,所以我们可以直接使用。如果需要单独引入,则添加如下坐标代码
<dependency> <groupid>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency>
2、Ribbon结合RestTemplate使用,完成负载均衡请求:Ribbon的负载均衡策略,可以通过实现IRule接口来重写,Ribbon实现IRule的类有如下结构
以上7种模式的切换,官方文档明确给出了警告:这个自定义配置类不能放在@ComponentScan所扫描的当前包下以及子包下,否则我们自定义的这个配置类就会被所有的Ribbon客户端所共享,达不到特殊化定制的目的。因此切换规则方式如下:
a.在主启动类所在的包外新建一个package,新建一个java类命名为MyRule,写入如下代码
@configuration public class MyRule @Bean public IRule myRule( ){ return new RandomRule();//定义为随机 } )
b.在主启动类中增加@Ribbonclient(name = "cloud-server-name" ,configuration=MyRule.class)注解来指定自定义IRule配置文件。
三、Ribbon负载均衡策略自定义
除了上述7种内置的策略之外,Ribbon还支持自定义策略,该策略要求继承AbstractLoadBalancerRule实现chose()方法或者实现IRule,且不能放在@ComponentScan所扫描的当前包和子包下,定义好策略之后,同样需要使用@Ribbonclient(name = "cloud-server-name" ,configuration=MySelfRule.class)注解来指定自定义IRule策略。