springCould中的Ribbon-从小白开始【5】

目录
1.什么是Ribbo❤️❤️❤️
2.eureka自带Ribbon ❤️❤️❤️
3. RestTemplate❤️❤️❤️
4.IRule❤️❤️❤️
5.负载均衡算法❤️❤️❤️
1.什么是Ribbo
- 1.Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端,负载均衡的工具。
- 2.主要功能是提供客户端的软件负载均衡算法和服务调用。
- 3.Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。
- 4.在配置文件中列出Load Balancer (简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。
2.eureka自带Ribbon
之前没引入Ribbon为啥也能负载均衡?
因为我们引入eureka时,eureka自动引入了ribbon

3. RestTemplate
restTemplate有两种方式:
- 1.restTempalte.getForObject
- 2.restTemplate.getForEntity
@GetMapping("/payment/get/{id}")public CommonResult<Payment> getPayment(@PathVariable("id") Integer id) {log.info("进入查询功能成功");return restTemplate.getForObject(PAYMENT_URL + "/payment/selectById/" + id, CommonResult.class);}@GetMapping("/payment/get2/{id}")public CommonResult<Payment> getPayment2(@PathVariable("id") Integer id) {log.info("进入查询功能成功");ResponseEntity<CommonResult> entity = restTemplate.getForEntity(PAYMENT_URL + "/payment/selectById/" + id, CommonResult.class);if (entity.getStatusCode().is2xxSuccessful()){log.info(entity.getStatusCode()+"\t"+entity.getHeaders());return entity.getBody();}else {return new CommonResult<>(404,"查询失败~");}}
4.IRule
4.1轮询策略
- 1.RoundRobinRule --------轮询
- 2.RandomRule ---------随机
- 3.RetryRule ---------重试 (先轮询,如果失败,在执行时间内重试)




4.2如何替换
1.创建配置类
注意:创建的配置类,不能被@ComponentSacn所扫描(不能与主启动类同包)

2.创建IRule对象
使用@Bean创建对象,根据要求返回具体实现类
@Configuration
public class MySelfRule {@Beanpublic IRule myRule(){return new RandomRule();//定义为随机}
}
3.添加@RibbonClient
name属性:表示要访问服务的名称。(必须与Eureka中的名称一致,包括大小写)
configuration属性:表示要访问的自定义IRUle配置类
@SpringBootApplication
@EnableDiscoveryClient
@RibbonClient(name = "COULD-PAYMENT-SERVICE",configuration = MySelfRule.class)
public class OrderMain80 {public static void main(String[] args) {SpringApplication.run(OrderMain80.class);}
}
5.负载均衡算法
5.1原理
- 算法:rest接口第几次请求数 % 服务器集群总数量 = 实际调用服务器位置下标,每次服务重启动后rest接口计数从1开始。
例如:
List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
获取实例:
List [0] instances = 127.0.0.1:8002
List [1] instances = 127.0.0.1:8001
8001和8002组成集群,共两台机器:
当总请求数为1时: 1%2=1对应下标位置为1 ,则获得服务地址为127.0.0.1:8001
当总请求数位2时: 2%2=0对应下标位置为0,则获得服务地址为127.0.0.1:8002
当总请求数位3时: 3%2=1对应下标位置为1 ,则获得服务地址为127.0.0.1:8001
当总请求数位4时: 4%2=0对应下标位置为0,则获得服务地址为127.0.0.1:8002
5.2手写轮询
- 自定义轮询算法
@Component
public class MyLb implements LoadBalance {private AtomicInteger atomicInteger = new AtomicInteger(0);public final int getAndIncrement() {int current;int next;do {current = this.atomicInteger.get();next = current >= Integer.MAX_VALUE ? 0 : current + 1;} while (!this.atomicInteger.compareAndSet(current, next));System.out.println("next:" + next);return next;}@Overridepublic ServiceInstance instances(List<ServiceInstance> serviceInstance) {int index = getAndIncrement() % serviceInstance.size();return serviceInstance.get(index);}
}
- 80服务使用自定义轮询
//自己的负载均衡算法@Autowiredprivate LoadBalance loadBalance;@Autowiredprivate DiscoveryClient discoveryClient;@GetMapping("/payment/lb")public String getPaymentLb() {List<ServiceInstance> instances = discoveryClient.getInstances("COULD-PAYMENT-SERVICE");if (instances == null || instances.size() < 0) {return null;}ServiceInstance serviceInstance=loadBalance.instances(instances);URI uri = serviceInstance.getUri();return restTemplate.getForObject(uri+"/payment/lb",String.class);}


相关文章:
springCould中的Ribbon-从小白开始【5】
目录 1.什么是Ribbo❤️❤️❤️ 2.eureka自带Ribbon ❤️❤️❤️ 3. RestTemplate❤️❤️❤️ 4.IRule❤️❤️❤️ 5.负载均衡算法❤️❤️❤️ 1.什么是Ribbo 1.Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端,负载均衡的工具。2.主要功能是提供客户端的软件…...
持续集成交付CICD:Jira 发布流水线
目录 一、实验 1.环境 2.GitLab 查看项目 3.Jira 远程触发 Jenkins 实现合并 GitLab 分支 4.K8S master节点操作 5.Jira 发布流水线 一、实验 1.环境 (1)主机 表1 主机 主机架构版本IP备注master1K8S master节点1.20.6192.168.204.180 jenkins…...
JuiceSSH结合内网穿透实现公网远程访问本地Linux虚拟机
文章目录 1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址连接测试 处于内网的虚拟机如何被外网访问呢?如何手机就能访问虚拟机呢? cpolarJuiceSSH 实现手机端远程连接Linux虚拟机(内网穿透,手机端连接Linux虚拟机) …...
使用 pytest.ini 文件控制输出 log 日志
一、前置说明 pytest.ini 文件中可以配置参数来控制 pytest 的运行行为,其存放路径要求与 conftest.py 一样。 项目根目录project_root/ ├── pytest.ini ├── tests/ │ └── test_demo.py以test开头的测试子目录project_root/ ├── tests/ │ ├── pytest.in…...
【Spring】SpringBoot 配置文件
文章目录 什么是配置文件SpringBoot配置文件配置文件快速入手配置文件的格式properties 配置文件说明properties 基本语法读取配置文件信息properties 配置格式缺点 yml 配置文件说明yml 基本语法使用 yml 连接数据库 yml 使用进阶yml 配置不同数据类型配置对象配置集合配置Map…...
Koordinator 支持 K8s 与 YARN 混部,小红书在离线混部实践分享
作者:索增增(小红书)、宋泽辉(小红书)、张佐玮(阿里云) 背景介绍 Koordinator 是一个开源项目,基于阿里巴巴在容器调度领域多年累积的经验孵化诞生,目前已经支持了 K8s…...
网游逆向分析与插件开发-游戏反调试功能的实现-项目需求与需求拆解
上一个专栏结束位置:网游逆向分析与插件开发-代码保护壳的优化-修改随机基址为固定基址-CSDN博客 上一个专栏是做了一个壳有了一定的保护,但是保护还是不够,最大的保护是根上把问题解决了,就是我不允许你对我进行调试,…...
阶段七-GitEE
Git:版本控制软件 Git的优点 1.1 协同修改 多人并行不悖的修改服务器端的同一个文件。 1.2 数据备份 不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态。 1.3 版本管理 在保存每一个版本的文件信息的时候要做到不保存重复数据&…...
Redis小记(1)
目录 1.Redis和Mysql的区别 2.Redis常用命令 1.Redis和Mysql的区别 a:mysql和redis的存储方式不同 mysql是关系型数据库,用表来进行存储数据。 redis是通过键值对来存储数据,key使用string来标识,value可以是各种不同的数据结构。 b:mys…...
Flutter windows 环境配置
Flutter windows 环境配置 从零开始,演示flutter环境配置到启动项目,同时支持 vscode 和 android studio 目录 Flutter windows 环境配置一、环境配置1. Flutter SDK2. Android Studio3. JDK4. 拓展安装5. Visual Studio 2022二、项目创建和启动1. vsco…...
odoo17核心概念view5——ir_ui_view.py
这是view系列的第5篇文章,介绍一下view对应的后端文件ir_ui_view.py,它是base模块下的一个文件 位置:odoo\addons\base\models\ir_ui_view.py 该文件一共定义了三个模型 1.1 ir.ui.view.custom 查询数据库这个表是空的,从名字看…...
截断整型提升算数转换
文章目录 🚀前言🚀截断🚀整型提升✈️整型提升是怎样的 🚀算术转换 🚀前言 大家好啊!这里阿辉补一下前面操作符遗漏的地方——截断、整型提升和算数转换 看这一篇要先会前面阿辉讲的数据的存储否则可能看不…...
阿里云 ECS Docker、Docker Compose安装
https://help.aliyun.com/document_detail/51853.html https://docs.docker.com/compose/install/ Centos https://blog.csdn.net/Alen_xiaoxin/article/details/104850553 systemctl enable dockerdocker-compose安装 https://blog.csdn.net/qq465084127/article/details/…...
LeetCode——1276. 不浪费原料的汉堡制作方案
通过万岁!!! 题目,给你两个数tomatoSlices和cheeseSlices,然后每制作一个巨无霸汉堡则消耗4个tomatoSlices和1和cheeseSlices,每制作一个小皇堡则需要消耗2个tomatoSlices和1和cheeseSlices。问给你这两个…...
隆道吴树贵:生成式人工智能在招标采购中的应用
12月22日,由中国招标投标协会主办的招标采购数字发展大会在北京召开,北京隆道网络科技有限公司总裁吴树贵受邀出席大会,并在“招标采购数字化交易创新成果”专题会议上发言,探讨生成式人工智能如何在招标采购业务中落地应用。 本次…...
docker搭建kali及安装oneforall
前期docker的安装这里就不用多说了,直接看后面的代码 安装oneforall 1.安装git和pip3 sudo apt update sudo apt install git python3-pip -y2.克隆项目 git clone https://gitee.com/shmilylty/OneForAll.git3.安装相关依赖 cd OneForAll/ sudo apt install pyt…...
【MySQL】数据库之事务
目录 一、什么是事务 二、事务的ACID是什么? 三、有哪些典型的不一致性问题? 第一种:脏读 第二种:不可重复读 第三种:幻读 第四种:丢失更新 四、隔离级别有哪些? (1…...
AGV|RGV小车RFID传感器CNS-RFID-01/1S的RS232通讯联机方法
CNS-RFID-01/1S广泛应用于AGV小车,搬运机器人,无人叉车等领域,用于定位,驻车等应用,可通过多种通讯方式进行读写操作,支持上位机控制,支持伺服电机,PLC等控制设备联机,本…...
【Python可视化系列】一文教会你绘制美观的热力图(理论+源码)
一、问题 前文相关回顾: 【Python可视化系列】一文彻底教会你绘制美观的折线图(理论源码) 【Python可视化系列】一文教会你绘制美观的柱状图(理论源码) 【Python可视化系列】一文教会你绘制美观的直方图(理…...
百度Apollo五步入门自动驾驶:Dreamview与离线数据包分析(文末赠送apollo周边)
🎬 鸽芷咕:个人主页 🔥 个人专栏:《linux深造日志》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! ⛳️ 粉丝福利活动 ✅参与方式:通过连接报名观看课程,即可免费获取精美周边 ⛳️活动链接…...
告别手动画图!用SUMO的netedit快速搭建高速公路交织区路网(附完整XML文件)
高速公路交织区建模实战:SUMO netedit高效操作指南与避坑手册 第一次打开SUMO的netedit时,面对密密麻麻的按钮和参数,大多数交通工程专业的学生都会感到无从下手。尤其是在处理高速公路交织区这类复杂道路结构时,传统的手动绘制方…...
CMIP6数据降尺度实战:用Python从零构建区域气候模型(附完整代码)
CMIP6数据降尺度实战:用Python从零构建区域气候模型 当全球气候模型(GCM)的分辨率无法满足区域研究需求时,降尺度技术成为连接全球与局部气候信息的桥梁。本文将带您从CMIP6数据获取开始,逐步实现统计降尺度和动力降尺…...
如何快速配置罗技鼠标宏:5步实现绝地求生稳定压枪
如何快速配置罗技鼠标宏:5步实现绝地求生稳定压枪 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 在绝地求生的激烈对战中࿰…...
Python扩展模块发布即弃坑?PyPI审核新规+manylinux2014/2023+musllinux多目标轮子构建全流程(含CI/CD自动化脚本)
第一章:Python扩展模块发布即弃坑?PyPI审核新规manylinux2014/2023musllinux多目标轮子构建全流程(含CI/CD自动化脚本)PyPI自2023年起强化了对二进制轮子(wheel)的合规性审查,尤其针对C/C扩展模…...
终极宽屏补丁:让《暗黑破坏神2》在现代电脑上重获新生
终极宽屏补丁:让《暗黑破坏神2》在现代电脑上重获新生 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否曾在…...
5秒批量打开20个网页?这款效率工具让多任务处理快到飞起
5秒批量打开20个网页?这款效率工具让多任务处理快到飞起 【免费下载链接】Open-Multiple-URLs Browser extension for opening lists of URLs built on top of WebExtension with cross-browser support 项目地址: https://gitcode.com/gh_mirrors/op/Open-Multip…...
IINA:macOS上最优雅的全能视频播放器终极指南
IINA:macOS上最优雅的全能视频播放器终极指南 【免费下载链接】iina 项目地址: https://gitcode.com/gh_mirrors/iin/iina 如果你在寻找一款既强大又美观的macOS视频播放器,IINA绝对是你的不二之选。这款基于mpv引擎的现代播放器,不仅…...
保姆级教程:用C++和Eigen库手搓一个URDF机器人正解器(以Franka Panda为例)
从零实现URDF机器人正解器:C与Eigen实战指南(Franka Panda案例) 机械臂末端执行器的精准定位是机器人控制的基础。本文将带你用C和Eigen库,不依赖ROS等框架,从零构建一个完整的URDF解析与正运动学计算系统。我们会以F…...
OpenClaw数据可视化:Qwen3.5-4B-Claude分析并绘制图表
OpenClaw数据可视化:Qwen3.5-4B-Claude分析并绘制图表 1. 为什么需要AI辅助的数据可视化 作为一个经常需要处理数据的开发者,我过去常常陷入这样的困境:花几个小时清洗和分析数据后,却在最后一步——可视化呈现上卡壳。该用折线…...
当 AI 开始制造 AI:递归自我提升时代的人类工程师生存指南
1. 核心命题:人类瓶颈的消失与算力主导的新纪元 1.1 递归自我提升的拐点降临 1.1.1 从"人类设计"到"自我迭代"的范式转移 人工智能发展正经历一场深刻的范式革命,其核心特征是从"人类工程师主导设计"向"AI系统自主迭代进化"的根本…...
