负载均衡Ribbon底层实现
前言上篇文章讲述了SpringCloud框架如何实现负载均衡,非常简单,今天,我们采用Debug方式追底层源码,探究它是如何实现负载均衡的,已经底层负载机制为什么是轮询上篇文章:负载均衡Ribbon准备准备一个Eureka,三个服务器(集群),一个客户端,5个全运行注意:Debug运行user-consumer-demo项目(客户端)一、Debug运行为什么我们只输入了servic...
前言
上篇文章讲述了SpringCloud框架如何实现负载均衡,非常简单,今天,我们采用Debug方式追底层源码,探究它是如何实现负载均衡的,已经底层负载机制为什么是轮询
上篇文章:负载均衡Ribbon
准备
准备一个Eureka,三个服务器(集群),一个客户端,5个全运行
注意:Debug运行user-consumer-demo项目(客户端)
一、Debug运行
为什么我们只输入了service名称就可以访问了呢?之前还要获取ip和端口。
显然有人帮我们根据service名称,获取到了服务实例的ip和端口。它就是LoadBalancerInterceptor
我们进行源码跟踪:(Debug运行user-consumer-demo项目)
-
双击Shift 输入
LoadBalancerInterceptor
进入如下页面,在这个方法打断点
-
使用Postman输入地址,数据库多准备几条数据,因为我们的客户端Service切割字符串,可以多次调用Dao,所以可以形成负载均衡的多次访问使用Postman输入地址,数据库多准备几条数据,因为我们的客户端Service切割字符串,可以多次调用Dao,所以可以形成负载均衡的多次访问
-
发送
-
按住Ctrl+Alt 鼠标点击进入execute方法
-
execute方法,断点停留,点下一步
-
点几次下一步
-
注意此时已经获取到了端口号8081,实现了端口号分配
-
多次放行,我们发现,端口号被轮询
第一次
第二次
第三次
第四次重复上述机制,轮询 -
所以我们重新运行在进入一次56行代码方法,因为从它之后有了端口号
-
进入断点停留,发现这个方法只是调用,并没有实际操作,转接而已,所以进入他的方法
-
chooseServer,方法翻译就是选择服务器,所以可以知道是我们要找的方法
-
点的时候发现有三个服务,选择BaseLoadBalancer,断点停留
-
走几步,发现这些单词,计数,规则,rule是成员变量,点开看看
-
至此,我们知道了负载均衡为什么默认是轮询
-
拆徐断点
至此,负载均衡,实现,底层,轮询,我们都知道了
二、访问结果
三、Ribbon进阶
Ribbon除了轮询机制,还有随机,指定服务两种机制
祝你幸福
送你一首歌《Whistle》Flo Rida
附图:宁波,我的舍友
更多推荐
所有评论(0)