日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

JavaEE进阶知识学习-----SpringCloud(六)Ribbon负载均衡

發(fā)布時間:2025/6/15 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaEE进阶知识学习-----SpringCloud(六)Ribbon负载均衡 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Ribbon負(fù)載均衡

Ribbon概述

Spring Cloude Ribbon是基于Netfilx Ribbon實現(xiàn)的一套客戶端 負(fù)載均衡的工具,簡單說,Ribbon是Netfilix發(fā)布的開源項目,主要功能就是提供 客戶端的軟件負(fù)載均衡算法,將Netfilix的中間層服務(wù)連接在一起,Ribbon客戶端組件提供了一系列完善的配置項如連接超時,重試等,簡單說,就是在配置文件中列出Load Balance后面的所有機器,Ribbon會自動的幫助你基于某種算法規(guī)則(簡單輪詢,隨機連接等)去連接這些機器,也可以使用Ribbon自定義負(fù)載均衡算法。LB,即負(fù)載均衡,在微服務(wù)或者分布式集群中常用的一種應(yīng)用。負(fù)載均衡就是將用戶的請求平攤的分配到多個服務(wù)上,從而達到HA,常見的負(fù)載均衡軟件有Nginx,LVS,硬件F5等

Ribbon配置初步

由于Ribbon是客戶端的負(fù)載均衡工具,所以我們需要修改的是客戶端項目microservicecloud-consumer-dept-80

POM.xml文件

<!-- Ribbon相關(guān) --> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-ribbon</artifactId> </dependency> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency> 復(fù)制代碼

修改application.yml文件,添加Eureka的服務(wù)注冊地址

server: port: 80 eureka: client: register-with-eureka: false #自己不能注冊 service-url: defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ 復(fù)制代碼

修改客戶端配置類

由于客戶端使用restTemplate訪問服務(wù)端中的數(shù)據(jù)接口,restTemplate配置在服務(wù)端的配置類中,所以修改如下

@Configuration public class ConfigBean {@Bean@LoadBalancedpublic RestTemplate geRestTemplate(){return new RestTemplate();} } 復(fù)制代碼

修改客戶端主程序啟動類

@SpringBootApplication @EnableEurekaClient public class DeptConsumer80_App {public static void main(String[] args) {SpringApplication.run(DeptConsumer80_App.class, args);} } 復(fù)制代碼

修改客戶端訪問類DeptController_Consumer.java

private static final String REST_URL_PREFIX = "http://MICROSERVICECLOUD-DEPT"; 復(fù)制代碼

測試

啟動7001,7002,7003三個服務(wù)注冊中心,啟動8001服務(wù)提供者,啟動80客戶端,使用http://localhost/consumer/dept/list可以渠道對應(yīng)的數(shù)據(jù),在DeptController_Consumer使用的是http://MICROSERVICECLOUD-DEPT服務(wù)名稱來調(diào)用服務(wù)的接口,相比之前的http://localhost:8001,Ribbon和Eureka整合后,Consumer可以直接通過服務(wù)名稱來調(diào)用服務(wù),而不再關(guān)心地址和端口號。

Ribbon負(fù)載均衡

目前只有一個microservicecloud-provider-dept-8001服務(wù)提供者,為了實現(xiàn)Ribbon的負(fù)載均衡,所以我們需要多個服務(wù)提供者實例,新建microservicecloud-provider-dept-8002,microservicecloud-provider-dept-8003兩個Module。參考8001的pom.xml文件修改8002,8003的pom.xml文件。拷貝8001中的所以類和配置文件mybatis和application.yml文件,將主啟動類修改為對應(yīng)的名字

microservicecloud-provider-dept-8002服務(wù)提供者

使用的數(shù)據(jù)庫SQL語句

DROP DATABASE IF EXISTS cloudDB02 ;CREATE DATABASE cloudDB02 CHARACTER SET UTF8 ;USE cloudDB02 ;CREATE TABLE dept (deptno BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,dname VARCHAR (60),db_source VARCHAR (60) ) ;INSERT INTO dept(dname,db_source) VALUES('開發(fā)部',DATABASE()); INSERT INTO dept(dname,db_source) VALUES('人事部',DATABASE()); INSERT INTO dept(dname,db_source) VALUES('財務(wù)部',DATABASE()); INSERT INTO dept(dname,db_source) VALUES('市場部',DATABASE()); INSERT INTO dept(dname,db_source) VALUES('運維部',DATABASE()); 復(fù)制代碼

Application.yml文件

server: port: 8002mybatis: config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文件所在路徑 type-aliases-package: com.luo.springcloud.entities # 所有Entity別名類所在包 mapper-locations: - classpath:mybatis/mapper/**/*.xml # mapper映射文件spring: application: name: microservicecloud-dept datasource: type: com.alibaba.druid.pool.DruidDataSource # 當(dāng)前數(shù)據(jù)源操作類型 driver-class-name: org.gjt.mm.mysql.Driver # mysql驅(qū)動包 url: jdbc:mysql://localhost:3306/cloudDB02 # 數(shù)據(jù)庫名稱 username: root password: 1234 dbcp2: min-idle: 5 # 數(shù)據(jù)庫連接池的最小維持連接數(shù) initial-size: 5 # 初始化連接數(shù) max-total: 5 # 最大連接數(shù) max-wait-millis: 200 復(fù)制代碼

microservicecloud-provider-dept-8003服務(wù)提供者

使用的數(shù)據(jù)庫SQL語句

DROP DATABASE IF EXISTS cloudDB03 ;CREATE DATABASE cloudDB03 CHARACTER SET UTF8 ;USE cloudDB03 ;CREATE TABLE dept (deptno BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,dname VARCHAR (60),db_source VARCHAR (60) ) ;INSERT INTO dept(dname,db_source) VALUES('開發(fā)部',DATABASE()); INSERT INTO dept(dname,db_source) VALUES('人事部',DATABASE()); INSERT INTO dept(dname,db_source) VALUES('財務(wù)部',DATABASE()); INSERT INTO dept(dname,db_source) VALUES('市場部',DATABASE()); INSERT INTO dept(dname,db_source) VALUES('運維部',DATABASE()); 復(fù)制代碼

Application.yml文件

server: port: 8003mybatis: config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文件所在路徑 type-aliases-package: com.luo.springcloud.entities # 所有Entity別名類所在包 mapper-locations: - classpath:mybatis/mapper/**/*.xml # mapper映射文件spring: application: name: microservicecloud-dept datasource: type: com.alibaba.druid.pool.DruidDataSource # 當(dāng)前數(shù)據(jù)源操作類型 driver-class-name: org.gjt.mm.mysql.Driver # mysql驅(qū)動包 url: jdbc:mysql://localhost:3306/cloudDB03 # 數(shù)據(jù)庫名稱 username: root password: 1234 dbcp2: min-idle: 5 # 數(shù)據(jù)庫連接池的最小維持連接數(shù) initial-size: 5 # 初始化連接數(shù) max-total: 5 # 最大連接數(shù) max-wait-millis: 200 復(fù)制代碼

微服務(wù)提供者說明

三個微服務(wù)提供者連接不同的數(shù)據(jù)庫,因此在application.yml文件中,我們需要修改端口號和連接的數(shù)據(jù)庫,注意的是三個微服務(wù)提供者的微服務(wù)名字保持一樣,也就是如下的配置信息

spring: application: name: microservicecloud-dept 復(fù)制代碼

負(fù)載均衡自測

訪問連接http://localhost:8001/dept/list,http://localhost:8002/dept/list,http://localhost:8003/dept/list得到不同數(shù)據(jù)庫數(shù)據(jù),當(dāng)我們啟動服務(wù)注冊中心7001,7002,7003,再啟動80客戶端,這個時候訪問localhost/consumer/dept/list,每次刷新就會得到不同數(shù)據(jù)庫的數(shù)據(jù)。這就是Ribbon默認(rèn)的輪詢算法的負(fù)載均衡。

Ribbon核心組件IRule

Ribbon負(fù)載均衡算法

Ribbon默認(rèn)提供的是輪詢的負(fù)載均衡算法,完整了還有如下

RoundRobinRule輪詢
RandomRule隨機
AvaliabilityFilteringRule會先過濾由于多次訪問故障而處于斷路器跳閘的狀態(tài)的服務(wù)和并發(fā)的連接數(shù)量超過閾值的服務(wù),然后對剩余的服務(wù)列表按照輪詢策略
WeightedResponseTimeRule根據(jù)平均響應(yīng)時間計算所有服務(wù)的權(quán)重,響應(yīng)時間越快服務(wù)權(quán)重越大
RetryRule先按照RoundRobinRule策略獲取服務(wù),如果獲取服務(wù)失敗會在指定時間內(nèi)重試
BestAvailableRule會先過濾掉由于多次訪問故障二處于斷路器跳閘狀態(tài)的服務(wù),然后選擇一個并發(fā)量最小的服務(wù)
ZoneAvoidanceRule默認(rèn)規(guī)則,復(fù)合判斷server所在的區(qū)域的性能和server的可用性選擇服務(wù)器

Ribbon負(fù)載均衡算法使用方法

在客戶端的配置類ConfigBean.java中添加IRule的實現(xiàn)

@Configuration public class ConfigBean {@Bean@LoadBalancedpublic RestTemplate geRestTemplate(){return new RestTemplate();}@Beanpublic IRule myRule(){return new RandomRule();} } 復(fù)制代碼

Ribbon自定義

如果不使用Ribbon默認(rèn)的七種負(fù)載均衡算法,這個時候就需要使用自定義負(fù)載均衡算法

客戶端主啟動類使用注解@RibbonClient

@SpringBootApplication @EnableEurekaClient @RibbonClient(name="MICROSERVICECLOUD-DEPT",configuration=MySelfRule.class) public class DeptConsumer80_App {public static void main(String[] args) {SpringApplication.run(DeptConsumer80_App.class, args);} } 復(fù)制代碼

特此說明

RibbonClient注解中的MySelfRule類使我們自定義負(fù)載均衡算法的類,但是,這個自定義配置類不能放在@ComponentScan所掃描的當(dāng)前包下以及子包下,否則我們這個自定義的配置類會被所有的Ribbon客戶端所共享,也就說,達不到我們特殊化定制的目的。舉例說明,自定義配置類不能放在項目主啟動類所有的包以及子包下,因為主啟動類使用注解@SpringBootApplication,這個注解點進去使用@ComponentScan注解

自定義負(fù)載均衡算法

輪詢算法中每一個服務(wù)輪詢一次,現(xiàn)在需求是每一個服務(wù)調(diào)用五次后在輪詢下一個服務(wù)

自定義配置類

package com.luo.myrule;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.netflix.loadbalancer.IRule;@Configuration public class MySelfRule {@Beanpublic IRule myRule(){return new RandomRule_lky();} } 復(fù)制代碼

自定義算法類

package com.luo.myrule;import java.util.List;import com.netflix.client.config.IClientConfig; import com.netflix.loadbalancer.AbstractLoadBalancerRule; import com.netflix.loadbalancer.ILoadBalancer; import com.netflix.loadbalancer.Server;public class RandomRule_lky extends AbstractLoadBalancerRule{// total = 0 // 當(dāng)total==5以后,我們指針才能往下走,// index = 0 // 當(dāng)前對外提供服務(wù)的服務(wù)器地址,// total需要重新置為零,但是已經(jīng)達到過一個5次,我們的index = 1// 分析:我們5次,但是微服務(wù)只有8001 8002 8003 三臺,OK?private int total = 0; // 總共被調(diào)用的次數(shù),目前要求每臺被調(diào)用5次private int currentIndex = 0; // 當(dāng)前提供服務(wù)的機器號public Server choose(ILoadBalancer lb, Object key){if (lb == null) {return null;}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;} // private int total = 0; // 總共被調(diào)用的次數(shù),目前要求每臺被調(diào)用5次 // private int currentIndex = 0; // 當(dāng)前提供服務(wù)的機器號if(total < 5){server = upList.get(currentIndex);total++;}else {total = 0;currentIndex++;if(currentIndex >= upList.size()){currentIndex = 0;}} if (server == null) {Thread.yield();continue;}if (server.isAlive()) {return (server);}server = null;Thread.yield();}return server;}@Overridepublic Server choose(Object key){return choose(getLoadBalancer(), key);}@Overridepublic void initWithNiwsConfig(IClientConfig clientConfig){} } 復(fù)制代碼

總結(jié)

以上是生活随笔為你收集整理的JavaEE进阶知识学习-----SpringCloud(六)Ribbon负载均衡的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: av国产一区二区 | 女同另类之国产女同 | www.浪潮av.com | 秘密基地免费观看完整版中文 | 一区二区三区黄色 | 国产一二三四五区 | 一个色av | 免费小视频在线观看 | 日本三级网站在线观看 | 亚洲国产aⅴ精品一区二区 日韩黄色在线视频 | 黄色av毛片 | 色激情网 | 色爽 | 美丽的姑娘在线观看免费 | 日韩小视频网站 | 国产网址在线观看 | 欧洲成人在线 | 亚洲精品无人区 | 污片免费观看 | 国产又粗又黄又猛 | 国产老妇伦国产熟女老妇视频 | 免费在线观看日韩av | 亚洲高清在线看 | 中国精品久久 | 欧美三级久久 | 影音先锋男人的天堂 | 在线观看成年人视频 | 蜜臀一区二区三区 | 国产伦精品一区二区三区视频1 | 久久久91 | 96看片| 波多野结衣女同 | 蜜臀一区二区三区精品免费视频 | 东京热无码av一区二区 | 香蕉国产精品 | 自拍偷拍999 | a国产在线| 国产中文在线 | 波多野结衣一区在线 | 欧美日韩人妻精品一区二区三区 | 美日韩在线视频 | 爱插网 | 波多野结衣50连登视频 | 欧美中文字幕第一页 | 久久久精品免费观看 | 欧美顶级黄色大片免费 | 午夜激情免费 | 精品国产乱码久久久 | 小宝贝真紧h军人h | 国产精品成人免费一区久久羞羞 | 97视频成人 | 香蕉视频在线观看免费 | 人与动物2免费观看完整版电影高清 | 中国毛片视频 | 免费网站av| 国产午夜一级一片免费播放 | 国产精品毛片一区二区在线看 | 国产一区二区三区在线观看免费 | 前任攻略在线观看免费完整版 | 黄色av电影网址 | 人妖ts福利视频一二三区 | 欧美一级免费视频 | 不用播放器av | 国产日韩欧美精品一区二区 | 一区免费视频 | 色91视频| 亚洲国产精品国自产拍av | 国产一区二区三区四区hd | 欧美国产日韩在线 | 成人教育av| 国产在线a | 久久久久久一级片 | 毛片a区 | av片免费播放 | 亚洲 激情 小说 另类 欧美 | 美女久久久久久 | 99热思思 | 国产午夜影院 | 国产又大又粗又爽的毛片 | yy111122少妇光屁股影院 | 精品人妻一区二区三区蜜桃 | 国产情侣免费视频 | 特及毛片| 久久综合网址 | 一级国产黄色片 | 毛片高清免费 | 伊人青草 | 99国产精品久久 | 欧美综合亚洲图片综合区 | 久久久久久亚洲中文字幕无码 | 欧美五月激情 | 亚洲永久免费精品 | 香蕉久久一区二区三区 | 日韩欧美视频在线 | 久久不射网站 | 手机av中文字幕 | 国产999视频 | 在线色站 | 国模一区二区 |