最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Cloud LoadBalancer 負(fù)載均衡詳解

 更新時(shí)間:2025年02月21日 11:49:41   作者:2的n次方_  
本文介紹了如何在Spring Cloud中使用SpringCloudLoadBalancer實(shí)現(xiàn)客戶端負(fù)載均衡,并詳細(xì)講解了輪詢策略和隨機(jī)策略的配置方法,此外,還提供了部署到云服務(wù)器并在多個(gè)實(shí)例之間進(jìn)行負(fù)載均衡的步驟,感興趣的朋友一起看看吧

1. 在 idea 上運(yùn)行多個(gè)服務(wù)

在上面的遠(yuǎn)程調(diào)用的代碼中是根據(jù)應(yīng)用名稱獲取到了服務(wù)實(shí)例列表,從列表中選擇了一個(gè)服務(wù)實(shí)例,如果說一個(gè)服務(wù)對(duì)應(yīng)多個(gè)實(shí)例該怎么分配呢,例如上面的 product-service 配置的是 9090 端口號(hào),如果再想開啟一個(gè)product-service 的服務(wù),那么就需要把原來的服務(wù)停止掉再開啟,接下來演示一下不修改代碼的條件下如何開啟多個(gè)服務(wù):

首先點(diǎn)擊 idea 中的 service 選項(xiàng)

把剛剛啟動(dòng)的服務(wù)添加到列表

然后再復(fù)制出來一份應(yīng)用

重命名應(yīng)用名稱之后配置端口號(hào):

添加之后再右鍵 9091 的服務(wù)再配置一個(gè) 9092 的服務(wù)

然后右鍵把新復(fù)制的服務(wù)都啟動(dòng)

啟動(dòng)成功之后注冊(cè)中心的 product-service 就有了三個(gè)實(shí)例

2. 問題引入

在進(jìn)行獲取服務(wù)時(shí)發(fā)現(xiàn)每次獲取到的實(shí)例并不是均衡的,原因就是每一次從 eureka 中獲取的服務(wù)列表中實(shí)例的順序可能是不一樣的,上面的 product-service 服務(wù)的三個(gè)端口號(hào)是 9090, 9091, 9092,每次獲取到的順序可能不一樣,在之前的代碼中是通過 get(0) 來獲取實(shí)例列表中的第一個(gè)實(shí)例,也就需要對(duì)之前寫的代碼進(jìn)行修改

我們期望是按照順序來依次獲取服務(wù),也就是一個(gè) 獲取次數(shù)%實(shí)例數(shù) 的關(guān)系,那么首先需要一個(gè)計(jì)數(shù)器來計(jì)算當(dāng)前是第幾次請(qǐng)求,此外還需要固定獲取到的實(shí)例列表中的順序(也就是無論后面發(fā)起幾次請(qǐng)求,獲取到的實(shí)例列表都是一樣的)

根據(jù)上面的分析來修改一下代碼:

之后再重新啟動(dòng)服務(wù)進(jìn)行遠(yuǎn)程調(diào)用,實(shí)例按照均衡的順序被調(diào)用

在上面的代碼中是把初始化的部分固定了,也是有些不合理的,如果之后再新增實(shí)例的話就沒有辦法保持同步

3. 負(fù)載均衡

負(fù)載均衡是高并發(fā)、高可用系統(tǒng)必不可少的關(guān)鍵組件。當(dāng)服務(wù)流量增大時(shí),通常會(huì)采用增加機(jī)器的方式進(jìn)行擴(kuò)容,負(fù)載均衡就是用來在多個(gè)機(jī)器或者其他資源中,按照一定的規(guī)則合理分配負(fù)載。

上面的例子中,只是簡單地對(duì)實(shí)例進(jìn)行了輪詢,但真實(shí)的業(yè)務(wù)場(chǎng)景會(huì)更加復(fù)雜。比如根據(jù)機(jī)器的配置進(jìn)行負(fù)載分配,配置高的分配的流量高,配置低的分配流量低等。

負(fù)載均衡又可以分為服務(wù)端負(fù)載均衡和客戶端負(fù)載均衡,上面的代碼中就是在客戶端進(jìn)行負(fù)載均衡,來合理的分配訪問服務(wù)器

服務(wù)端負(fù)載均衡就是在服務(wù)端進(jìn)行負(fù)載均衡的算法分配,請(qǐng)求先到達(dá)負(fù)載均衡器,然后通過負(fù)載均衡算法,在多個(gè)服務(wù)器之間選擇一個(gè)進(jìn)行訪問。

4. Spring Cloud LoadBalancer

Spring Cloud LoadBalancer 用于在微服務(wù)架構(gòu)中實(shí)現(xiàn)客戶端負(fù)載均衡,接下來看如何使用:

在原來的 RestTemplate 的 Bean 中加上@LoadBalanced注解

@Configuration
public class BeanConfig {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

在遠(yuǎn)程調(diào)用的代碼中把 IP 和端口號(hào)改為服務(wù)名稱

public OrderInfo selectOrderById(Integer orderId){
    OrderInfo orderInfo = orderMapper.selectOrderById(orderId);
    String url = "http://product-service/product/" + orderInfo.getProductId();
    log.info("遠(yuǎn)程調(diào)用url = {}",url);
    ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class);
    orderInfo.setProductInfo(productInfo);
    return orderInfo;
}

然后再去發(fā)起請(qǐng)求

可以看出,請(qǐng)求都被均衡的分配到了每一個(gè)服務(wù)上

5. 負(fù)載均衡策略

Spring Cloud LoadBalancer 僅支持兩種負(fù)載均衡策略:輪詢策略和隨機(jī)策略,輪詢就是之前演示的按照順序輪流進(jìn)行分配,隨機(jī)策略就是隨機(jī)分配

官網(wǎng)中給出了切換負(fù)載均衡策略的方式:

Spring Cloud LoadBalancer :: Spring Cloud Commons

這里需要注意的是配置類不能被@Configuration修飾,并且不能超出組件的掃描范圍

把官方給的配置類復(fù)制一下

這里導(dǎo)入的包是 springframework 中的

由于遠(yuǎn)程調(diào)用用的是 RestTemplate ,所以要在 RestTemplate 的配置類中加上@LoadBalancerClient注解,并且指明是對(duì)哪個(gè)客戶端生效以及采用的負(fù)載均衡策略

配置好之后再去請(qǐng)求就會(huì)發(fā)現(xiàn)此時(shí)每一個(gè) product-service 被分配的請(qǐng)求是不一樣的,也是達(dá)到了一個(gè)隨機(jī)的效果

6. 部署到云服務(wù)器

分別把 eureka-server,order-service,product-service 打包,上傳到云服務(wù)器中,然后采用后臺(tái)啟動(dòng)的方式分別啟動(dòng)這三個(gè)服務(wù),并指定日志輸出路徑:

nohup java -jar eureka-server.jar >logs/eureka.log &

接著,由于需要測(cè)試負(fù)載均衡,再開啟兩個(gè) product-service 服務(wù),指定不同的端口號(hào):

nohup java -jar product-service.jar --server.port=9091>logs/product-9091.log &

到此這篇關(guān)于Spring Cloud LoadBalancer 負(fù)載均衡的文章就介紹到這了,更多相關(guān)Spring Cloud LoadBalancer 負(fù)載均衡內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java避免死鎖_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java避免死鎖_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    在有些情況下死鎖是可以避免的。本文將展示三種用于避免死鎖的技術(shù)。對(duì)java避免死鎖的相關(guān)知識(shí)感興趣的朋友一起通過本文學(xué)習(xí)吧
    2017-06-06
  • 如何在MyBatis中實(shí)現(xiàn)DataSource

    如何在MyBatis中實(shí)現(xiàn)DataSource

    今天給大家整理了如何在MyBatis中實(shí)現(xiàn)DataSource,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • IDEA+Maven搭建Spring環(huán)境的詳細(xì)教程

    IDEA+Maven搭建Spring環(huán)境的詳細(xì)教程

    這篇文章主要介紹了IDEA+Maven搭建Spring環(huán)境的詳細(xì)教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • redis分布式鎖的原理及代碼實(shí)例

    redis分布式鎖的原理及代碼實(shí)例

    這篇文章主要介紹了redis分布式鎖的原理及代碼實(shí)例,Redis作為一款高性能內(nèi)存數(shù)據(jù)庫,其提供了一種非常實(shí)用的分布式鎖解決方案,可以幫助開發(fā)人員輕松地實(shí)現(xiàn)分布式鎖功能,對(duì)于分布式系統(tǒng)的開發(fā)和維護(hù),具有非常大的實(shí)用價(jià)值,需要的朋友可以參考下
    2024-01-01
  • SpringBoot項(xiàng)目開發(fā)常用技術(shù)整合

    SpringBoot項(xiàng)目開發(fā)常用技術(shù)整合

    今天給大家分享springboot項(xiàng)目開發(fā)常用技術(shù)整合,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-08-08
  • 詳解netty中的frame解碼器

    詳解netty中的frame解碼器

    netty為我們提供了一些合適的frame解碼器,通過使用這些frame解碼器可以有效的簡化我們的工作,這篇文章主要介紹了netty中的frame解碼器,需要的朋友可以參考下
    2022-04-04
  • 解決MyBatis中模糊搜索使用like匹配帶%字符時(shí)失效問題

    解決MyBatis中模糊搜索使用like匹配帶%字符時(shí)失效問題

    Mybatis是我們?nèi)粘m?xiàng)目中經(jīng)常使用的框架,在項(xiàng)目中我們一般會(huì)使用like查詢作為模糊匹配字符進(jìn)行搜索匹配,下面的Mapper.xml是我們使用like在項(xiàng)目中進(jìn)行模糊匹配的常用方式,感興趣的朋友跟隨小編一起看看吧
    2021-09-09
  • Tomcat集群和Session復(fù)制應(yīng)用介紹

    Tomcat集群和Session復(fù)制應(yīng)用介紹

    本文將詳細(xì)介紹Tomcat集群和Session復(fù)制應(yīng)用,需要了解的朋友可以參考下
    2012-11-11
  • spring緩存cache的使用詳解

    spring緩存cache的使用詳解

    這篇文章主要介紹了spring緩存cache的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Spring Boot中Redis序列化優(yōu)化配置詳解

    Spring Boot中Redis序列化優(yōu)化配置詳解

    在使用Spring Boot集成Redis時(shí),序列化方式的選擇直接影響數(shù)據(jù)存儲(chǔ)的效率和系統(tǒng)兼容性,默認(rèn)的JDK序列化存在可讀性差、存儲(chǔ)空間大等問題,本文將深入探討如何優(yōu)化Redis序列化配置,感興趣的朋友跟隨小編一起看看吧
    2025-05-05

最新評(píng)論

高安市| 庄河市| 富蕴县| 河南省| 江华| 阳信县| 大关县| 泽普县| 多伦县| 渑池县| 五河县| 瑞昌市| 竹北市| 清流县| 博湖县| 清流县| 肇庆市| 繁峙县| 南漳县| 凤城市| 安多县| 阿拉善左旗| 德钦县| 乐陵市| 滦平县| 建宁县| 美姑县| 揭西县| 郎溪县| 锡林郭勒盟| 南岸区| 长寿区| 肥城市| 郑州市| 额尔古纳市| 兴安县| 西丰县| 云和县| 岢岚县| 清镇市| 云霄县|