当前位置: 首页 > news >正文

使用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&#xff1a;springcloud-provider-dept-8002 2. 配置跟8001一样 整合 Ribbon 由上述可知&#xff0c;Ribbon 是需要集成在消费端的 所以在消费端 &#xff1a; springcloud-03-consumer-dept-8082 进行修改 在 POM 文件中添加 Ribbon、Eureka 依赖 <!--…...

从页面仔到工程师,前端到底在发挥什么价值

玉伯在前端圈子里摸爬滚打十几年&#xff0c;他对前端价值的理解是什么样的&#xff1f;在他眼里&#xff0c;前端到底是一个怎样的岗位&#xff1f;我们带着这样的问题向他提问。支付宝体验技术部是前端同学最希望加入的团队之一&#xff0c;玉伯带领这个团队做出诸多创新产品…...

Java程序员进阶宝典,让你学习面试无忧!

心净则明,心诚则灵如果你想要一个月速成程序员&#xff0c;那么这篇文章不适合&#xff0c;如果你仅想要在IT圈“耍酷”&#xff0c;那你也不需要研读&#xff0c;如果你执着询问“退化”成为一名程序猿有啥捷径&#xff0c;那我只能告诉你&#xff0c;此路不通&#xff01;不可…...

Hadoop HDFS的主要架构与读写文件

一、Hadoop HDFS的架构 HDFS&#xff1a;Hadoop Distributed File System&#xff0c;分布式文件系统 &#xff11;&#xff0c;NameNode 存储文件的metadata&#xff0c;运行时所有数据都保存到内存&#xff0c;整个HDFS可存储的文件数受限于NameNode的内存大小一个Block在…...

面试题练习第五篇

面试题第五篇1. 说说React生命周期中有哪些坑&#xff1f;如何避免&#xff1f;2. 说说Real diff算法是怎么运作的&#xff1f;3. 调和阶段setState干了什么&#xff1f;4. 说说redux的实现原理是什么&#xff0c;写出核心代码&#xff1f;5. React合成事件的原理&#xff1f;6…...

hadoop02【尚硅谷】

HDFS 大数据学习笔记 一、HDFS产出背景及定义 HDFS产生背景 随着数据量越来越大&#xff0c;在一个操作系统存不下所有的数据&#xff0c;那么就分配到更多的操作系统管理的磁盘中&#xff0c;但是不方便管理和维护&#xff0c;迫切需要一种系统来管理多台机器上的文件&#x…...

Alist ——本地网盘管理器

Alist ——本地网盘管理器 一、下载工具 Alist https://github.com/alist-org/alist二、启动登录 进入下载好的文件中&#xff0c;在地址栏输入cmd进入命令行启动 进入命令行输入 alist start启动 记住密码&#xff0c;和端口进入浏览器 输入 &#xff1a;127.0.0.1:5244用…...

【白话科普】聊聊网络架构变革的关键——SDN

最近二狗子在网上冲浪的时候&#xff0c;不小心将 CDN 搜索成了 SDN&#xff0c;结果跳出来了一大堆相关的知识点。 好学的二狗子当然不会随随便便糊弄过去&#xff0c;于是认认真真学习了好久&#xff0c;终于了解了 SDN 是什么。 原来&#xff0c;SDN 的全称是 Software De…...

go gin学习记录4

环境 环境&#xff1a;mac m1&#xff0c;go version 1.17.2&#xff0c; goland&#xff0c; mysql 除了原生sql&#xff0c;和orm操作之外&#xff0c;go还有一类包&#xff0c;只用于生成sql&#xff0c;典型的如sqlbuilder&#xff0c;今天就来研究一下它。 安装sqlbuil…...

家政服务小程序实战开发教程015-填充用户信息

我们上一篇讲解了立即预约功能&#xff0c;存在的问题是&#xff0c;每次都需要用户填写联系信息。在我们前述篇章中已经介绍了用户注册的功能&#xff0c;在立即预约的时候我们需要把已经填写的用户信息提取出来&#xff0c;显示到表单对应的字段中。本篇我们就讲解一下如何提…...

python+selenium使用webdriver启动chrome出现闪退现象解决

这两天发现之前开发的爬虫程序出问题了&#xff1a;谷歌浏览器出现打开立即闪退的现象&#xff0c;代码未修改过&#xff0c;检查也没有任何问题&#xff01; 查看chrome浏览器发现版本更新了 ↑&#xff08;点击chrome浏览器右上角三个点&#xff0c;最下面帮助→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框架之类视图

类视图 思考&#xff1a;一个视图&#xff0c;是否可以处理两种逻辑&#xff1f;比如get和post请求逻辑。 如何在一个视图中处理get和post请求 注册视图处理get和post请求 以函数的方式定义的视图称为函数视图&#xff0c;函数视图便于理解。但是遇到一个视图对应的路径提供…...

win11/10+Azure kinect DK配置 VS2019/2017/2015的方法(简单,亲测可以)

首先下载文件&#xff1a;文件的下载和安装方法参考我的博客(131条消息) WIN11/win10Azure Kinect DK详细驱动配置教程&#xff08;亲测&#xff09;_Vertira的博客-CSDN博客安装好VS2019,创建好控制台c工程。这些都很简单&#xff0c;不细说。配置&#xff1a;首先配置环境变量…...

子查询的相关例题

子查询的相关例题&#xff1a; 查询和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.注意力集中保持在核心库&#xf…...

【SQL】MySQL秘籍

chihiro-notes 千寻简笔记 v0.1 内测版 &#x1f4d4; 笔记介绍 大家好&#xff0c;千寻简笔记是一套全部开源的企业开发问题记录&#xff0c;毫无保留给个人及企业免费使用&#xff0c;我是作者星辰&#xff0c;笔记内容整理并发布&#xff0c;内容有误请指出&#xff0c;笔…...

vue-router 的基本用法

vue-router 的基本用法 1.什么是 vue-router vue-router 是 vue.js 官方给出的路由解决方案。它只能结合 vue 项目进行使用&#xff0c;能够轻松的管理 SPA 项目中组件的切换。 vue-router 的官方文档地址&#xff1a;https://router.vuejs.org/zh/ 2.vue-router 安装和配置的…...

图像显著性目标检测

一、概述 1、定义 图像显著性检测(Saliency Detection,SD)&#xff0c; 指通过智能算法模拟人的视觉系统特点&#xff0c;预测人类的视觉凝视点和眼动&#xff0c;提取图像中的显著区域(即人类感兴趣的区域)&#xff0c;可以广泛用于目标识别、图像编辑以及图像检索等领域&am…...

力扣-查找重复的电子邮箱

大家好&#xff0c;我是空空star&#xff0c;本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目&#xff1a;182. 查找重复的电子邮箱二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果总结…...

如何选择正规可靠的ISO认证机构?

ISO认证其实早已融入我们生活中&#xff0c;因为日常生活很多产品都有认证标识&#xff0c;企业办理ISO体系就需要找第三方认证公司&#xff0c;市面上这种公司也有不少&#xff0c;但找到合适可靠、认真负责的还是不易&#xff0c;尤其是体系认证有年审&#xff0c;如何留住客…...

React源码解读之更新的创建

React 的鲜活生命起源于 ReactDOM.render &#xff0c;这个过程会为它的一生储备好很多必需品&#xff0c;我们顺着这个线索&#xff0c;一探婴儿般 React 应用诞生之初的悦然。 更新创建的操作我们总结为以下两种场景 ReactDOM.rendersetStateforceUpdate ReactDom.render …...

【程序人生】从土木专员到网易测试工程师,薪资翻3倍,他经历了什么?

转行对于很多人来说&#xff0c;是一件艰难而又纠结的事情&#xff0c;或许缺乏勇气&#xff0c;或许缺乏魄力&#xff0c;或许内心深处不愿打破平衡。可对于我来说&#xff0c;转行是一件不可不为的事情&#xff0c;因为那意味着新的方向、新的希望。我是学工程管理的&#xf…...

C++——C++11第二篇

目录 可变参数模板 lambda表达式 lambda表达式语法 捕获列表说明 可变参数模板 可变参数&#xff1a;可以有0到n个参数&#xff0c;如之前学过的 Printf C11的新特性可变参数模板能够让您创建可以接受可变参数的函数模板和类模板 模板参数包 // Args是一个模板参数包&…...

14.最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀&#xff0c;返回空字符串 ""。示例 1&#xff1a;输入&#xff1a;strs ["flower","flow","flight"]输出&#xff1a;"fl"示例 2&#xff1a;输入&…...

【免费教程】 SWMM在城市水环境治理中的应用及案例分析

SWMMSWMM&#xff08;storm water management model&#xff0c;暴雨洪水管理模型&#xff09;是一个动态的降水-径流模拟模型&#xff0c;主要用于模拟城市某一单一降水事件或长期的水量和水质模拟。EPA&#xff08;Environmental Protection Agency&#xff0c;环境保护署&am…...

SortableJS/Sortable拖拽组件,使用详细(Sortablejs安装使用)

简述 作为一名前端开发人员&#xff0c;在工作中难免会遇到拖拽功能&#xff0c;分享一个github上一个不错的拖拽js库&#xff0c;能满足我们在项目开发中的需要&#xff0c;支持Vue和React&#xff0c;下面是SortableJS的使用详细&#xff1b; 这个是sortableJS中文官方文档&…...

Heartbeat+Nginx实验

HeartbeatNginx实验 Heartbeat是什么&#xff1f; Heartbeat是 Linux-HA 工程的一个组件&#xff0c;自1999 年开始到现在&#xff0c;发布了众多版本&#xff0c;是目前开源 Linux-HA项 目成功的一个例子&#xff0c;在行业内得到了广泛的应用 构建规划&#xff1a; 两台后…...

JavaEE|网络编程之套接字 TCP

文章目录一、ServerSocket API构造方法常用方法二、Socket API构造方法常用方法注意事项三、TCP中的长短连接E1:一发一收&#xff08;短连接&#xff09;E2:请求响应&#xff08;短连接&#xff09;E3&#xff1a;多线程下的TCP回响服务器说明&#xff1a;这部分说实话有点懵&a…...

Robot Framework自动化测试---元素定位

不要误认为Robot framework 只是个web UI测试工具&#xff0c;更正确的理解Robot framework是个测试框架&#xff0c;之所以可以拿来做web UI层的自动化是国为我们加入了selenium2的API。比如笔者所处工作中&#xff0c;更多的是拿Robot framework来做数据库的接口测试&#xf…...

12306网站是哪家公司做开发的/百度一下首页官网百度

点击上方 "Linux中文社区" 关注&#xff0c;星标或者置顶18点00分准时推送&#xff0c;第一时间送达责编&#xff1a;中文妹 | | 作者&#xff1a;神三元来自&#xff1a;juejin.im/post/5e527c58e51d4526c654bf41Linux中文社区(ID: Linux-China) 第 58 次推文上一篇…...

做水果网站特点分析报告/专业seo整站优化

最终存预算金额的表是GL_BC_PACKETS中状态&#xff08;STATUS_CODE&#xff09;为A&#xff0c;ACTUAL_FLAG为B的记录&#xff0c; 获取预算金额的API是glf02220_pkg.get_balances_info 获取可用资金的API是gl_funds_available_pkg.calc_funds 设置预算的步骤&#xff1a; 一…...

做学校后台网站/找网站设计公司

awesome-view 项目地址&#xff1a;xinghongfei/awesome-view 简介&#xff1a;自定义 View 有这些足够了 更多&#xff1a;作者 提 Bug 标签&#xff1a; 自定义view- 自定义 View 主要掌握以下四块内容&#xff1a; 绘制机制&#xff1a;掌握 onMeasure,onLayout,…...

做云盘网站哪个好/百度推广销售

JavaScrip中如何实现继承 Java中实现继承通过关键字extands来实现的&#xff0c;而javascrip中没有该关键字&#xff0c;通过以下方法可以实现继承关系&#xff1a; 先定义一个父类 //定义一个动物类function Animal(name){this.namename || Animal;this.sleepfunction(){do…...

手机网站建设是什么/百度一下你就知道手机版官网

本文主要总结线程共享数据的相关知识&#xff0c;主要包括两方面:一是某个线程内如何共享数据&#xff0c;保证各个线程的数据不交叉&#xff1b;一是多个线程间如何共享数据&#xff0c;保证数据的一致性。线程范围内共享数据自己实现的话&#xff0c;是定义一个Map,线程为键&…...

郑州外贸网站建设/seo搜索引擎优化技术教程

前言有一段时间没有写博客了&#xff0c;整天都在忙&#xff0c;上班&#xff0c;录制课程&#xff0c;恰巧最近一段时间比较清闲&#xff0c;打算弄弄MYSQL数据库。关于MySQL数据库&#xff0c;这里就不做过多的介绍&#xff0c;开源、免费等特性深受各个互联网行业喜爱&#…...