负载均衡Ribbon底层实现

前言

上篇文章讲述了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
附图:宁波,我的舍友
在这里插入图片描述

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值