欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spring Cloud调用Ribbon的步骤

程序员文章站 2022-06-16 10:12:08
一、简介1. 是什么 spring cloud ribbon是基于netflix ribbon实现的一套客户端负载均衡的工具。 简单的说,ribbon是netflix发布的开源项目,主要功...

一、简介

1. 是什么

  • spring cloud ribbon是基于netflix ribbon实现的一套客户端负载均衡的工具。
  • 简单的说,ribbon是netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。
  • 官方文档
  • 目前已进入维护状态,以后可以通过open feign作为替代方案
  • 负载均衡+resttemplate,实现负载均衡调用

2. 负载均衡

  • 负载均衡(load balance,lb),即将用户的请求平摊到多个服务上,从而达到系统的高可用(ha)
  • 负载均衡分为两种方案:集中式lb、进程内lb

2.1 集中式lb

  • 即服务方和消费方之间使用独立的lb设施,由该设备负责把访问请求通过某种策略转发至服务提供方。
  • 比如说nginx、gateway、zuul等

2.2 进程内lb

  • 负载均衡的算法集成到消费方,消费方在注册中心中获取可用地址,然后通过lb算法选择出一个合适的服务器。
  • ribbon就属于进程内lb,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务方提供的地址。

二、实验

ribbon集成在spring-cloud-starter-netflix-eureka-client中,可以参考。在此基础上简单修改一下,就可以完成服务调用及负载均衡

1. resttemplate

  • 官网
  • 通过resttemplate,可以实现httpclient的功能,只需要给它提供一个url及返回类型,即可实现远程方法调用。

1.1 加入到ioc容器

首先,将其加入到ioc容器中。@loadbalanced表示开启负载均衡。

1.2 resttemplate 远程调用

也可以使用getforentity()方法,获取整个响应,自己在响应中获取想要的内容。

如果使用post方法,就将get改成post就好了。

1.3 配置文件

url,可以写具体的地址,表示直接调用该地址;也可以写在eureka的服务名,首先在eureka中获取该服务的所有地址,再通过lb选择一个。

2. loadbalancer

上面通过@loadbalanced开启了负载均衡。默认使用轮询算法,也可以修改成其他算法。

class 算法
com.netflix.loadbalancer.roundrobinrule 轮询,默认算法
com.netflix.loadbalancer.randomrule 随机算法,通过产生随机数选择服务器
com.netflix.loadbalancer.retryrule 先按照roundrobinrule的策略获取服务,如果获取服务失败则在指定时间内会进行重试,获取可用的服务
weightedresponsetimerule 对roundrobinrule的扩展,响应速度越快的实例选择权重越大,越容易被选择
bestavailablerule 会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
availabilityfilteringrule 先过滤掉故障实例,再选择并发较小的实例
zoneavoidancerule 默认规则,复合判断server所在区域的性能和server的可用性选择服务器

2.1 修改负载均衡算法

如果想让该算法只针对某个服务,则不能将其放在componentscan够得到的地方,否则会修改所有服务的负载均衡算法。因此,最好在外面再新建一个package,用来放这个lb

在主启动类上,标识一下服务与算法直接的映射关系

如果嫌这种方法麻烦,也可以使用配置文件的方法

3. 负载均衡算法源码

以默认的roundrobinrule作为阅读的源码,其他的源码基本上很类似,只是修改的选择服务器的代码。

Spring Cloud调用Ribbon的步骤

  • roundrobinrule父类为abstractloadbalancerrule,abstractloadbalancerrule实现了接口irule

3.1 irule

3.2 abstractloadbalancerrule

基本没什么作用,只是将公共的部分提取了出来进行实现。

3.3 roundrobinrule

简单来说,就是通过一个计数器,实现了轮询

简单来说,该方法就是根据目前的状态,选择一个服务器返回。

简单来说,就是将目前的计数器+1取余,获取一个下标,并返回。为了避免高并发的危险,采用cas的方法进行设置。

以上就是spring cloud调用ribbon的步骤的详细内容,更多关于spring cloud调用ribbon的资料请关注其它相关文章!