服务调用之SpringCloudRibbon客户端负载均衡工具使用

一、什么是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策略。

  

原文地址:https://www.cnblogs.com/zqhIndex/p/15395293.html