前言

上篇文章讲述了SpringCloud框架如何实现负载均衡,非常简单,今天,我们采用Debug方式追底层源码,探究它是如何实现负载均衡的,已经底层负载机制为什么是轮询
上篇文章:负载均衡Ribbon

准备

准备一个Eureka,三个服务器(集群),一个客户端,5个全运行
注意:Debug运行user-consumer-demo项目(客户端)
在这里插入图片描述

一、Debug运行

为什么我们只输入了service名称就可以访问了呢?之前还要获取ip和端口。

显然有人帮我们根据service名称,获取到了服务实例的ip和端口。它就是LoadBalancerInterceptor

我们进行源码跟踪:(Debug运行user-consumer-demo项目)

  1. 双击Shift 输入 LoadBalancerInterceptor进入如下页面,在这个方法打断点
    在这里插入图片描述

  2. 使用Postman输入地址,数据库多准备几条数据,因为我们的客户端Service切割字符串,可以多次调用Dao,所以可以形成负载均衡的多次访问使用Postman输入地址,数据库多准备几条数据,因为我们的客户端Service切割字符串,可以多次调用Dao,所以可以形成负载均衡的多次访问
    在这里插入图片描述

  3. 发送
    在这里插入图片描述

  4. 按住Ctrl+Alt 鼠标点击进入execute方法
    在这里插入图片描述

  5. execute方法,断点停留,点下一步
    在这里插入图片描述

  6. 点几次下一步
    在这里插入图片描述

  7. 注意此时已经获取到了端口号8081,实现了端口号分配
    在这里插入图片描述

  8. 多次放行,我们发现,端口号被轮询
    第一次
    在这里插入图片描述
    第二次
    在这里插入图片描述
    第三次
    在这里插入图片描述
    第四次重复上述机制,轮询

  9. 所以我们重新运行在进入一次56行代码方法,因为从它之后有了端口号
    在这里插入图片描述

  10. 进入断点停留,发现这个方法只是调用,并没有实际操作,转接而已,所以进入他的方法
    在这里插入图片描述

  11. chooseServer,方法翻译就是选择服务器,所以可以知道是我们要找的方法
    在这里插入图片描述

  12. 点的时候发现有三个服务,选择BaseLoadBalancer,断点停留
    在这里插入图片描述

  13. 走几步,发现这些单词,计数,规则,rule是成员变量,点开看看
    在这里插入图片描述

  14. 至此,我们知道了负载均衡为什么默认是轮询
    在这里插入图片描述

  15. 拆徐断点
    至此,负载均衡,实现,底层,轮询,我们都知道了

二、访问结果

在这里插入图片描述

三、Ribbon进阶

Ribbon除了轮询机制,还有随机,指定服务两种机制

祝你幸福
送你一首歌《Whistle》Flo Rida
附图:宁波,我的舍友
在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐