使用ribbon实现负载均衡
1.新建两个provider:springcloud-provider-dept-8002

2. 配置跟8001一样
整合 Ribbon
由上述可知,Ribbon 是需要集成在消费端的
所以在消费端 : springcloud-03-consumer-dept-8082 进行修改
在 POM 文件中添加 Ribbon、Eureka 依赖
<!--ribbon--><!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-ribbon --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-ribbon</artifactId><version>1.4.7.RELEASE</version></dependency><!--Eureka 服务提供者--><!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId><version>1.4.7.RELEASE</version></dependency>
编写 application.yml
# Eureka
eureka:client:# 不向注册中心注册自己register-with-eureka: false# 配置 可连接的注册中心service-url:defaultZone: http://127.0.0.1:7001/eureka/,http://127.0.0.2:7002/eureka/
在主启动类上添加 Eureka 启动项 : @EnableEurekaClient
在之前把 RestTemplate 注册到 Bean 的配置方法上添加一个注解
配置 负载均衡实现 RestTemplate : @LoadBalanced
修改控制层
/**提供者 URL 的前缀** 不使用 Ribbon 时 ,这里就是第一中写法** 使用 Ribbon 实现负载均衡 时,这里就不能写死为一个地址,* 而需要通过注册中心的服务名来访问* 服务名:在 提供者 YML 文件中配置的 spring:application:name: 的值* 或者 监控页面的 Application 字段值*/
//private static final String REST_URL_PREFIX = "http://localhost:8081";private static final String REST_URL_PREFIX = "http://SpringCloud-02-provider";
启动集群、提供者、消费者,进行测试
进入 消费者页面 发出请求,得到正确结果
2.2 添加提供者,观察负载均衡
添加一个数据库 : spring_cloud_02
新建一个 服务提供者 : springcloud-02-provider-dept-8083
把另一个 提供者 的文件都复制过来,再做修改
修改 application.yml (端口号、数据库、描述信息)
【注意】多个提供者的服务名必须一致
server:port: 8083mybatis:type-aliases-package: com.demo.pojomapper-locations: classpath:mybatis/mapper/*.xmlconfig-location: classpath:mybatis/mybatis-config.xmlspring:application:name: SpringCloud-02-providerdatasource:username: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/spring_cloud_02?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8type: com.alibaba.druid.pool.DruidDataSourcelogging:level:com.demo.mapper: DEBUG# Eureka,配置服务注册到哪里
eureka:client:service-url:# 配置监控页面的地址,这是在 Eureka Server 中配置的defaultZone: http://127.0.0.1:7001/eureka/,http://127.0.0.2:7002/eureka/instance:# 修改 Eureka 监控页面上的默认描述信息instance-id: springcloud-provider-dept-8083
修改主启动类,添加注解
//在配置过这个注解后,服务启动会自动注册到 Eureka Server
@EnableEurekaClient
//开启服务发现
@EnableDiscoveryClient
2.3 修改负载均衡策略
负载均衡有一个核心的结构 : IRule
进入该接口
实现类
修改为已经实现的策略
因为是在消费者端做负载均衡,所以在消费者中修改
把已经实现的策略注册的 Bean 中即可
修改 springcloud-03-consumer-dept-8082 的 BeanConfig 文件
@Bean
public IRule myRule(){// 先使用已经实现的策略——随机return new RandomRule();
}
重建消费者,刷新请求,会发现不再轮询,会在已有的提供者之间随机选择
修改配置 Ribbon 的方式
新建一个 MyRule 类,并且把上面那个 myRule 方法挪过去
【注意】:这个 MyRule 类 不能在主应用程序的上下文(也就是 主启动类的同级目录中),所以需要单独的创建一个包
@Configuration
public class MyRule {/*** 修改默认的负载均衡策略*/@Beanpublic IRule customize(){// 先使用已经实现的策略——随机return new RandomRule();}
}
在主启动类上加上 Ribbon 的注解:
@RibbonClient@SpringBootApplication
@EnableEurekaClient
// configuration:标注 Rule 的配置类 ; name:标注需要配置的服务名
@RibbonClient(configuration = MyRule.class,name = "SpringCloud-02-provider")
public class Springcloud03ConsumerDept8082Application {public static void main(String[] args) {SpringApplication.run(Springcloud03ConsumerDept8082Application.class, args);}
}
自定义策略(简单示例)
可以点开刚刚看的那个 RandomRule 的源代码,复制过来修改一下
修改要求:每个提供者访问五次
编写 DiyRule()
public class DiyRule extends AbstractLoadBalancerRule {public Server choose(ILoadBalancer lb, Object key) {if (lb == null) {return null;} else {Server server = null;while(server == null) {if (Thread.interrupted()) {return null;}// 获得可获得(活着的)的服务List<Server> upList = lb.getReachableServers();// 获得所有的服务List<Server> allList = lb.getAllServers();int serverCount = allList.size();if (serverCount == 0) {return null;}//==上面是写死的======中间是修改部分==================System.out.println("自定义的 Rule");System.out.println(upList.size());// 访问某一个提供者的次数int times = 0;// 提供者的下标int index = 0;// 从活着的服务中随机获取一个server = (Server)upList.get(index);if (times < 4){times++;}else {times = 1;index = (index + 1) % upList.size();}//==下面是写死的======中间是修改部分===================if (server == null) {Thread.yield();} else {if (server.isAlive()) {return server;}server = null;Thread.yield();}}return server;}}@Overridepublic void initWithNiwsConfig(IClientConfig iClientConfig) {}@Overridepublic Server choose(Object o) {return null;}
}
MyRule 类
@Configuration
public class CustomizedRule {/*** 修改默认的负载均衡策略*/@Beanpublic IRule customize(){// 先使用已经实现的策略——随机return new DiyRule();}
}
在主启动类上添加
// configuration:标注 Rule 的配置类 ; name:标注需要配置的服务名
@RibbonClient(name = "SPRINGCLOUD-PROVIDER", configuration = CustomizedRule.class)
相关文章:
使用ribbon实现负载均衡
1.新建两个provider:springcloud-provider-dept-8002 2. 配置跟8001一样 整合 Ribbon 由上述可知,Ribbon 是需要集成在消费端的 所以在消费端 : springcloud-03-consumer-dept-8082 进行修改 在 POM 文件中添加 Ribbon、Eureka 依赖 <!--…...
从页面仔到工程师,前端到底在发挥什么价值
玉伯在前端圈子里摸爬滚打十几年,他对前端价值的理解是什么样的?在他眼里,前端到底是一个怎样的岗位?我们带着这样的问题向他提问。支付宝体验技术部是前端同学最希望加入的团队之一,玉伯带领这个团队做出诸多创新产品…...
Java程序员进阶宝典,让你学习面试无忧!
心净则明,心诚则灵如果你想要一个月速成程序员,那么这篇文章不适合,如果你仅想要在IT圈“耍酷”,那你也不需要研读,如果你执着询问“退化”成为一名程序猿有啥捷径,那我只能告诉你,此路不通!不可…...
Hadoop HDFS的主要架构与读写文件
一、Hadoop HDFS的架构 HDFS:Hadoop Distributed File System,分布式文件系统 1,NameNode 存储文件的metadata,运行时所有数据都保存到内存,整个HDFS可存储的文件数受限于NameNode的内存大小一个Block在…...
面试题练习第五篇
面试题第五篇1. 说说React生命周期中有哪些坑?如何避免?2. 说说Real diff算法是怎么运作的?3. 调和阶段setState干了什么?4. 说说redux的实现原理是什么,写出核心代码?5. React合成事件的原理?6…...
hadoop02【尚硅谷】
HDFS 大数据学习笔记 一、HDFS产出背景及定义 HDFS产生背景 随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件&#x…...
Alist ——本地网盘管理器
Alist ——本地网盘管理器 一、下载工具 Alist https://github.com/alist-org/alist二、启动登录 进入下载好的文件中,在地址栏输入cmd进入命令行启动 进入命令行输入 alist start启动 记住密码,和端口进入浏览器 输入 :127.0.0.1:5244用…...
【白话科普】聊聊网络架构变革的关键——SDN
最近二狗子在网上冲浪的时候,不小心将 CDN 搜索成了 SDN,结果跳出来了一大堆相关的知识点。 好学的二狗子当然不会随随便便糊弄过去,于是认认真真学习了好久,终于了解了 SDN 是什么。 原来,SDN 的全称是 Software De…...
go gin学习记录4
环境 环境:mac m1,go version 1.17.2, goland, mysql 除了原生sql,和orm操作之外,go还有一类包,只用于生成sql,典型的如sqlbuilder,今天就来研究一下它。 安装sqlbuil…...
家政服务小程序实战开发教程015-填充用户信息
我们上一篇讲解了立即预约功能,存在的问题是,每次都需要用户填写联系信息。在我们前述篇章中已经介绍了用户注册的功能,在立即预约的时候我们需要把已经填写的用户信息提取出来,显示到表单对应的字段中。本篇我们就讲解一下如何提…...
python+selenium使用webdriver启动chrome出现闪退现象解决
这两天发现之前开发的爬虫程序出问题了:谷歌浏览器出现打开立即闪退的现象,代码未修改过,检查也没有任何问题! 查看chrome浏览器发现版本更新了 ↑(点击chrome浏览器右上角三个点,最下面帮助→Google Chr…...
新建idea项目
目录IDEA系列之创建各种项目 https://blog.csdn.net/LOVEQD123/article/details/105886077 idea 创建项目的三种方式 https://blog.csdn.net/weixin_50034122/article/details/118754521 创建空项目 https://blog.csdn.net/qq_44537956/article/details/123075134 创建 spri…...
Django框架之类视图
类视图 思考:一个视图,是否可以处理两种逻辑?比如get和post请求逻辑。 如何在一个视图中处理get和post请求 注册视图处理get和post请求 以函数的方式定义的视图称为函数视图,函数视图便于理解。但是遇到一个视图对应的路径提供…...
win11/10+Azure kinect DK配置 VS2019/2017/2015的方法(简单,亲测可以)
首先下载文件:文件的下载和安装方法参考我的博客(131条消息) WIN11/win10Azure Kinect DK详细驱动配置教程(亲测)_Vertira的博客-CSDN博客安装好VS2019,创建好控制台c工程。这些都很简单,不细说。配置:首先配置环境变量…...
子查询的相关例题
子查询的相关例题: 查询和Zlotkey相同部门的员工姓名和工资 SELECT e1.last_name,e1.first_name,e1.salary FROM employees e1 WHERE e1.department_id (SELECT e2.department_idFROM employees e2WHERE e2.last_nameZlotkey );查询工资比公司平均工资高的员工号…...
vue2.0与vue3.0及vue与react区别
vue2.0与3.0及vue与react区别vue2.0 与 vue3.0 区别1. 双向绑定原理2.Vue3支持碎片(Fragments)3.Composition API4.生命周期5.v-if和v-for的优先级6.typescript支持vue与 react区别共同点1.虚拟domdiff算法2.提供了响应式和组件化的视图组件。3.注意力集中保持在核心库…...
【SQL】MySQL秘籍
chihiro-notes 千寻简笔记 v0.1 内测版 📔 笔记介绍 大家好,千寻简笔记是一套全部开源的企业开发问题记录,毫无保留给个人及企业免费使用,我是作者星辰,笔记内容整理并发布,内容有误请指出,笔…...
vue-router 的基本用法
vue-router 的基本用法 1.什么是 vue-router vue-router 是 vue.js 官方给出的路由解决方案。它只能结合 vue 项目进行使用,能够轻松的管理 SPA 项目中组件的切换。 vue-router 的官方文档地址:https://router.vuejs.org/zh/ 2.vue-router 安装和配置的…...
图像显著性目标检测
一、概述 1、定义 图像显著性检测(Saliency Detection,SD), 指通过智能算法模拟人的视觉系统特点,预测人类的视觉凝视点和眼动,提取图像中的显著区域(即人类感兴趣的区域),可以广泛用于目标识别、图像编辑以及图像检索等领域&am…...
力扣-查找重复的电子邮箱
大家好,我是空空star,本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目:182. 查找重复的电子邮箱二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果总结…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
