负载均衡Ribbon底层实现

前言

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

准备

准备一个Eureka,三个服务器(集群),一个客户端,5个全运行
注意:Debug运行user-consumer-demo项目(客户端)
image

一、Debug运行

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

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

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

  1. 双击Shift 输入 LoadBalancerInterceptor进入如下页面,在这个方法打断点
    image

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

  3. 发送
    image

  4. 按住Ctrl+Alt 鼠标点击进入execute方法
    image

  5. execute方法,断点停留,点下一步
    image

  6. 点几次下一步
    image

  7. 注意此时已经获取到了端口号8081,实现了端口号分配
    image

  8. 多次放行,我们发现,端口号被轮询
    第一次
    image

第二次
image

第三次
image

第四次重复上述机制,轮询

  1. 所以我们重新运行在进入一次56行代码方法,因为从它之后有了端口号
    image

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

  3. chooseServer,方法翻译就是选择服务器,所以可以知道是我们要找的方法
    image

  4. 点的时候发现有三个服务,选择BaseLoadBalancer,断点停留
    image

  5. 走几步,发现这些单词,计数,规则,rule是成员变量,点开看看
    image

  6. 至此,我们知道了负载均衡为什么默认是轮询
    image

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

二、访问结果

image

三、Ribbon进阶

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

祝你幸福
送你一首歌《Whistle》Flo Rida
附图:宁波,我的舍友
image

posted @ 2025-08-01 17:31  HezhezhiyuLe  阅读(7)  评论(0)    收藏  举报