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作为阅读的源码,其他的源码基本上很类似,只是修改的选择服务器的代码。
- roundrobinrule父类为abstractloadbalancerrule,abstractloadbalancerrule实现了接口irule
3.1 irule
3.2 abstractloadbalancerrule
基本没什么作用,只是将公共的部分提取了出来进行实现。
3.3 roundrobinrule
简单来说,就是通过一个计数器,实现了轮询
简单来说,该方法就是根据目前的状态,选择一个服务器返回。
简单来说,就是将目前的计数器+1取余,获取一个下标,并返回。为了避免高并发的危险,采用cas的方法进行设置。
以上就是spring cloud调用ribbon的步骤的详细内容,更多关于spring cloud调用ribbon的资料请关注其它相关文章!
推荐阅读
-
JSP 开发之servlet中调用注入spring管理的dao
-
详解Spring cloud使用Ribbon进行Restful请求
-
spring cloud-给Eureka Server加上安全的用户认证详解
-
Spring-cloud 服务发现与消费(以ribbon为例)
-
Spring cloud Eureka注册中心搭建的方法
-
spring集成okhttp3的步骤详解
-
spring boot2.0.4集成druid,用jmeter并发测试工具调用接口,druid查看监控的结果
-
Spring Cloud如何使用Feign构造多参数的请求
-
Spring Cloud使用Feign实现Form表单提交的示例
-
Spring Boot应用Docker化的步骤详解