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

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

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

什么是負載均衡

通俗的講,負載均衡就是將負載(工作任務(wù),訪問請求)進行分攤到多個操作單元(服務(wù)器,組件)上進行執(zhí)行。

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

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

我們在微服務(wù)調(diào)用關(guān)系中一般會選擇客戶端負載均衡,也就是在服務(wù)調(diào)用的一方來決定服務(wù)由哪個提供者執(zhí)行。

自定義實現(xiàn)負載均衡

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

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

命令為-Dserver.port=8082

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

自定義實現(xiàn)負載均衡

修改 shop-order 的代碼

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

啟動兩個服務(wù)提供者和一個服務(wù)消費者,多訪問幾次消費者,測試效果:

基于Ribbon實現(xiàn)負載均衡

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

添加注解

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

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

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

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

//從nacos中獲取服務(wù)地址
//自定義規(guī)則實現(xiàn)隨機挑選服務(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ù)進行測試,微服務(wù)調(diào)用成功。

Ribbon支持的負載均衡策略

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

通過修改配置來調(diào)整 Ribbon 的負載均衡策略

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

通過注入Bean來調(diào)整 Ribbon 的負載均衡策略

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

饑餓加載

為何要開啟饑餓加載,因為在我們第一次加載時候,響應時間比較慢,原因是第一次加服務(wù)需要從服務(wù)注冊列表中拉取服務(wù)實例,以及初始化相關(guān)的組件到 Spring 中。

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

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

總結(jié)

到這兒,我們微服務(wù)調(diào)用的負載均衡實現(xiàn)就結(jié)束了。下一篇將為大家?guī)砘趂eign實現(xiàn)微服務(wù)調(diào)用的文章,敬請期待吧!

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

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

相關(guān)文章

最新評論

鸡东县| 鸡泽县| 稻城县| 宝坻区| 汉中市| 石屏县| 剑阁县| 宁波市| 寿宁县| 莱芜市| 清镇市| 饶阳县| 宝坻区| 垣曲县| 交城县| 那坡县| 团风县| 龙口市| 潜山县| 东辽县| 涿州市| 满城县| 湖南省| 沅江市| 鄂伦春自治旗| 凤冈县| 衢州市| 广西| 神木县| 丹棱县| 双辽市| 措美县| 江陵县| 墨脱县| 塔河县| 安乡县| 祁连县| 哈尔滨市| 甘南县| 横峰县| 永济市|