欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring Cloud實(shí)現(xiàn)微服務(wù)調(diào)用的負(fù)載均衡(詳解)

 更新時(shí)間:2024年03月05日 09:55:12   作者:阿Q說(shuō)代碼  
負(fù)載均衡就是將負(fù)載(工作任務(wù),訪問(wèn)請(qǐng)求)進(jìn)行分?jǐn)偟蕉鄠€(gè)操作單元(服務(wù)器,組件)上進(jìn)行執(zhí)行,根據(jù)負(fù)載均衡發(fā)生位置的不同,一般分為服務(wù)端負(fù)載均衡和客戶端負(fù)載均衡,本文給大家介紹Spring Cloud實(shí)現(xiàn)微服務(wù)調(diào)用的負(fù)載均衡的相關(guān)知識(shí),感興趣的朋友一起看看吧

什么是負(fù)載均衡

通俗的講,負(fù)載均衡就是將負(fù)載(工作任務(wù),訪問(wèn)請(qǐng)求)進(jìn)行分?jǐn)偟蕉鄠€(gè)操作單元(服務(wù)器,組件)上進(jìn)行執(zhí)行。

根據(jù)負(fù)載均衡發(fā)生位置的不同,一般分為服務(wù)端負(fù)載均衡客戶端負(fù)載均衡。

  • 服務(wù)端負(fù)載均衡指的是發(fā)生在服務(wù)提供者一方,比如常見(jiàn)的 nginx 負(fù)載均衡。
  • 客戶端負(fù)載均衡指的是發(fā)生在服務(wù)請(qǐng)求的一方,也就是在發(fā)送請(qǐng)求之前已經(jīng)選好了由哪個(gè)實(shí)例處理請(qǐng)求。

我們?cè)谖⒎?wù)調(diào)用關(guān)系中一般會(huì)選擇客戶端負(fù)載均衡,也就是在服務(wù)調(diào)用的一方來(lái)決定服務(wù)由哪個(gè)提供者執(zhí)行。

自定義實(shí)現(xiàn)負(fù)載均衡

啟動(dòng)shop-product微服務(wù)

在啟動(dòng) shop-product 微服務(wù)的基礎(chǔ)上,通過(guò)idea再啟動(dòng)一個(gè) shop-product 微服務(wù),設(shè)置其端口為8082。

命令為-Dserver.port=8082

通過(guò)nacos查看微服務(wù)的啟動(dòng)情況

自定義實(shí)現(xiàn)負(fù)載均衡

修改 shop-order 的代碼

public ShopOrder order(@PathVariable("pid") Long pid) {
        log.info("客戶下單,這時(shí)候要調(diào)用商品微服務(wù)查詢商品信息。。。");
        //從nacos中獲取服務(wù)地址
        List<ServiceInstance> instances = discoveryClient.getInstances("shop-product");
        //自定義規(guī)則實(shí)現(xiàn)隨機(jī)挑選服務(wù)
        int index = new Random().nextInt(instances.size());
        ServiceInstance serviceInstance = instances.get(index);
        String url = serviceInstance.getHost()+":"+serviceInstance.getPort();
        log.info(">>從nacos中獲取到的微服務(wù)地址為:"+ url);
        //通過(guò)restTemplate調(diào)用商品微服務(wù)
        ShopProduct shopProduct = restTemplate.getForObject("http://"+url+"/product/"+pid, ShopProduct.class);
        log.info("當(dāng)前用戶信息為自己,假設(shè)我們?cè)O(shè)置為1");
        ShopOrder shopOrder = new ShopOrder();
        shopOrder.setUid(1L);
        shopOrder.setUsername("公眾號(hào):阿Q說(shuō)代碼");
        shopOrder.setPid(shopProduct.getId());
        shopOrder.setPname(shopProduct.getPname());
        orderService.save(shopOrder);
        //商品扣減庫(kù)存的邏輯
        ProductReduceDTO productReduceDTO = new ProductReduceDTO();
        productReduceDTO.setProductId(pid);
        productReduceDTO.setReductCount(1);
        Integer count = restTemplate.postForObject("http://"+url+"/product/reduceStock", productReduceDTO, Integer.class);
        return shopOrder;
    }

啟動(dòng)兩個(gè)服務(wù)提供者和一個(gè)服務(wù)消費(fèi)者,多訪問(wèn)幾次消費(fèi)者,測(cè)試效果:

基于Ribbon實(shí)現(xiàn)負(fù)載均衡

Ribbon 是Spring Cloud的一個(gè)組件,它可以讓我們使用一個(gè)注解就能輕松的搞定負(fù)載均衡。

添加注解

在 RestTemplate 的生成方法上添加@LoadBalanced注解

@Bean
@LoadBalanced
 public RestTemplate getRestTemplate() {
     return new RestTemplate();
 }

修改服務(wù)調(diào)用的方法

將上一步中的代碼注釋掉,改為直接使用微服務(wù)名字,從nacos中獲取服務(wù)地址

//從nacos中獲取服務(wù)地址
//自定義規(guī)則實(shí)現(xiàn)隨機(jī)挑選服務(wù)
//List<ServiceInstance> instances = discoveryClient.getInstances("shop-product");
//int index = new Random().nextInt(instances.size());
//ServiceInstance serviceInstance = instances.get(index);
//String url = serviceInstance.getHost()+":"+serviceInstance.getPort();
//直接使用微服務(wù)名字,從nacos中獲取服務(wù)地址
String url="shop-product";

重啟服務(wù)進(jìn)行測(cè)試,微服務(wù)調(diào)用成功。

Ribbon支持的負(fù)載均衡策略

Ribbon內(nèi)置了多種負(fù)載均衡策略,內(nèi)部負(fù)載均衡的頂級(jí)接口為com.netflix.loadbalancer.IRule,具體的負(fù)載策略如下圖所示:

通過(guò)修改配置來(lái)調(diào)整 Ribbon 的負(fù)載均衡策略

# 負(fù)載均衡規(guī)則
shop-product:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

通過(guò)注入Bean來(lái)調(diào)整 Ribbon 的負(fù)載均衡策略

 @Bean
 public IRule randomRule(){
     return new RandomRule();
 }

饑餓加載

為何要開(kāi)啟饑餓加載,因?yàn)樵谖覀兊谝淮渭虞d時(shí)候,響應(yīng)時(shí)間比較慢,原因是第一次加服務(wù)需要從服務(wù)注冊(cè)列表中拉取服務(wù)實(shí)例,以及初始化相關(guān)的組件到 Spring 中。

開(kāi)啟饑餓加載的相關(guān)配置之后這些操作會(huì)在服務(wù)啟動(dòng)就會(huì)完成。

ribbon:
  eager-load:
    clients:
      - shop-product

總結(jié)

到這兒,我們微服務(wù)調(diào)用的負(fù)載均衡實(shí)現(xiàn)就結(jié)束了。下一篇將為大家?guī)?lái)基于feign實(shí)現(xiàn)微服務(wù)調(diào)用的文章,敬請(qǐng)期待吧!

后續(xù)的文章,我們將繼續(xù)完善我們的微服務(wù)系統(tǒng),集成更多的Alibaba組件。想要了解更多JAVA后端知識(shí),請(qǐng)點(diǎn)擊文末名片與我交流吧。留下您的一鍵三連,讓我們?cè)谶@個(gè)寒冷的東西互相溫暖吧!

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

相關(guān)文章

  • 一文搞清楚Java中Comparable和Comparator的區(qū)別

    一文搞清楚Java中Comparable和Comparator的區(qū)別

    Java中的Comparable和Comparator都是用于集合排序的接口,但它們有明顯的區(qū)別,文中通過(guò)一些實(shí)例代碼詳細(xì)介紹了Java中Comparable和Comparator的區(qū)別,感興趣的同學(xué)跟著小編一起學(xué)習(xí)吧
    2023-05-05
  • springboot服務(wù)正常啟動(dòng)之后,訪問(wèn)服務(wù)url無(wú)響應(yīng)問(wèn)題及解決

    springboot服務(wù)正常啟動(dòng)之后,訪問(wèn)服務(wù)url無(wú)響應(yīng)問(wèn)題及解決

    這篇文章主要介紹了springboot服務(wù)正常啟動(dòng)之后,訪問(wèn)服務(wù)url無(wú)響應(yīng)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 怎樣使用PowerMockito 測(cè)試靜態(tài)方法

    怎樣使用PowerMockito 測(cè)試靜態(tài)方法

    這篇文章主要介紹了使用PowerMockito 測(cè)試靜態(tài)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringBoot整合SQLite數(shù)據(jù)庫(kù)全過(guò)程

    SpringBoot整合SQLite數(shù)據(jù)庫(kù)全過(guò)程

    sqlite是一個(gè)很輕量級(jí)的數(shù)據(jù)庫(kù),可以滿足日常sql的需求,下面這篇文章主要給大家介紹了關(guān)于SpringBoot整合SQLite數(shù)據(jù)庫(kù)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • Java獲取最后插入MySQL記錄的自增ID值的3種方法

    Java獲取最后插入MySQL記錄的自增ID值的3種方法

    這篇文章介紹了Java獲取最后插入MySQL記錄的自增ID值的3種方法,有需要的朋友可以參考需要
    2013-08-08
  • Java怎樣創(chuàng)建集合才能避免造成內(nèi)存泄漏你了解嗎

    Java怎樣創(chuàng)建集合才能避免造成內(nèi)存泄漏你了解嗎

    內(nèi)存泄漏是指無(wú)用對(duì)象持續(xù)占有內(nèi)存或無(wú)用對(duì)象的內(nèi)存得不到及時(shí)釋放,從而造成內(nèi)存空間的浪費(fèi)稱為內(nèi)存泄漏。長(zhǎng)生命周期的對(duì)象持有短生命周期對(duì)象的引用就很可能發(fā)生內(nèi)存泄漏,盡管短生命周期對(duì)象已經(jīng)不再需要,但是因?yàn)殚L(zhǎng)生命周期持有它的引用而導(dǎo)致不能被回收
    2021-09-09
  • Java利用apache ftp工具實(shí)現(xiàn)文件上傳下載和刪除功能

    Java利用apache ftp工具實(shí)現(xiàn)文件上傳下載和刪除功能

    這篇文章主要為大家詳細(xì)介紹了Java利用apache ftp工具實(shí)現(xiàn)文件上傳下載、刪除功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Java多線程 生產(chǎn)者消費(fèi)者模型實(shí)例詳解

    Java多線程 生產(chǎn)者消費(fèi)者模型實(shí)例詳解

    這篇文章主要介紹了Java多線程 生產(chǎn)者消費(fèi)者模型實(shí)例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Hibernate之環(huán)境搭建及demo分享

    Hibernate之環(huán)境搭建及demo分享

    下面小編就為大家分享一篇Hibernate之環(huán)境搭建及demo,具有很好的參考價(jià)值,希望對(duì)大家有所幫助
    2017-11-11
  • Java實(shí)現(xiàn)將數(shù)組的元素用逗號(hào)連接的多種方法

    Java實(shí)現(xiàn)將數(shù)組的元素用逗號(hào)連接的多種方法

    在 Java 開(kāi)發(fā)中,我們經(jīng)常需要將數(shù)組中的元素用逗號(hào)連接成一個(gè)字符串,這種需求在日志記錄、數(shù)據(jù)導(dǎo)出、API 響應(yīng)等場(chǎng)景中非常常見(jiàn),本文將詳細(xì)介紹如何在 Java 中實(shí)現(xiàn)這一功能,并提供多種簡(jiǎn)潔的方法和優(yōu)化建議,需要的朋友可以參考下
    2025-01-01

最新評(píng)論