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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Cloud 入门 之 Ribbon 篇(二)

發布時間:2025/3/16 javascript 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Cloud 入门 之 Ribbon 篇(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、前言

上一篇《Spring Cloud 入門 之 Eureka 篇(一)》?介紹了微服務的搭建,服務注冊與發現。但在文章中留了一個小尾巴--如何正確使用 Eureka 進行服務發現并調用服務。

本篇文章將介紹如何使用 Ribbon 完成發現服務的調用以及其負載均衡的規則的使用。

二、簡單介紹

Spring Cloud Ribbon 是基于 Netflix Ribbon 實現的一套客戶端負載均衡工具,其主要功能是提供客戶端的軟件負載均衡算法,將 Netflix 的中間層服務連接在一起。

其運行原理如下圖:

Ribbon 運行時分成 2 個步驟:

1) 先選擇在同一個區域負載較少的 EurekaServer; 2) 再根據用戶指定的策略,在從 EurekaServer 中獲取注冊列表中的服務信息進行調用。

其中,Ribbon 提供多種負載均衡策略:如輪詢、隨機、響應時間加權等。

三、實戰演練

我們在 order-server 項目的基礎上進行修改。不清楚的讀者請先轉移至?《Spring Cloud 入門 之 Eureka 篇(一)》?進行瀏覽。

此外,筆者額外的創建 2 個 goods-server 項目,即現在有 3 個 goods-server 項目給 order-server 服務實現客戶端的負載均衡調用。

現在的項目列表如下:

服務實例端口描述
common-api-公用的 api,如:實體類
eureka-server9000注冊中心(Eureka 服務端)
goods-server8081商品服務(Eureka 客戶端)
goods-server-028082商品服務(Eureka 客戶端)
goods-server-038083商品服務(Eureka 客戶端)
order-server8100訂單服務(Eureka 客戶端)

在 order-server 項目中:

  • 添加依賴:
  • <dependencies> <!-- common api --> <dependency> <groupId>com.extlight.springcloud</groupId> <artifactId>common-api</artifactId> <version>${parent-version}</version> </dependency><!-- springmvc --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency><!-- eureka 客戶端 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency><!-- ribbon --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency> </dependencies>

    添加加 ribbon 的依賴。

    ? ? 2. 請求類添加?@LoadBalanced?注解:

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

    正如上文介紹的,Ribbon 是客戶端負載均衡工具,所以在 getRestTemplate 方法上添加?@LoadBalanced?注解實現負載均衡。

    ? ? 3. 修改請求地址:

    @Service public class OrderServiceImpl implements OrderService{@Autowired private RestTemplate restTemplate;// @Autowired // private DiscoveryClient client;@Override public void placeOrder(Order order) throws Exception{// 獲取商品服務地址列表 // List<ServiceInstance> list = this.client.getInstances("GOODS"); // String uri = ""; // for (ServiceInstance instance : list) { // if (instance.getUri() != null && !"".equals(instance.getUri())) { // uri = instance.getUri().toString(); // break; // } // } // // Result result = restTemplate.getForObject(new URI(uri + "/goods/goodsInfo/" + order.getGoodsId()), Result.class);Result result = this.restTemplate.getForObject("http://GOODS/goods/goodsInfo/" + order.getGoodsId(), Result.class);if (result != null && result.getCode() == 200) { System.out.println("=====下訂單===="); System.out.println(result.getData()); } }}

    修改 DiscoveryClient 相關代碼,使用?GOODS?作為請求商品服務的請求 URL。

    完成上邊 3 個操作后,啟動 3 臺 goods-server 服務 和 order-server 服務,通過 Postman 進行測試,運行結果如下:

    上圖中,通過 6 次請求返回的商品的端口信息可知,Ribbon 默認使用負載均衡的策略是輪詢,對服務進行調用。

    四、負載均衡策略

    #?4.1 策略規則

    Ribbon 提供 IRule 接口,該接口定義了如何訪問服務的方法,以下是該接口的實現類:

    1) RoundRobinRule:輪詢,默認使用的規則; 2) RandomRule:隨機; 3) AvailabilityFilteringRule:先過濾由于多次訪問故障而處于斷路器跳閘狀態以及并發連接數量超過閥值得服務,然后從剩余服務列表中按照輪詢策略進行訪問; 4) WeightedResponseTimeRule:根據平均響應時間計算所有的權重,響應時間越快服務權重越有可能被選中; 5) RetryRule:先按照 RoundRobinRule 策略獲取服務,如果獲取服務失敗則在指定時間內進行重試,獲取可用服務; 6) BestAvailableRule:先過濾由于多次訪問故障而處于斷路器跳閘狀態的服務,然后選擇并發量最小的服務; 7) ZoneAvoidanceRule:判斷 server 所在區域的性能和 server 的可用性來選擇服務器。

    #?4.2 策略使用

    在 order-server 項目中:

    @Configuration public class RestConfiguration {@Bean @LoadBalanced public RestTemplate getRestTemplate() { return new RestTemplate(); }@Bean public IRule testRule() { return new RandomRule(); } }

    手動創建負載均衡規則對象,本次測試使用的策略是隨機。

    啟動 order-server 項目后再次使用 Postman 測試,運行結果如下:

    由圖可知,隨機策略已生效,負載均衡的策略由輪詢變成了隨機。

    五、案例源碼

    Ribbon demo 源碼

    總結

    以上是生活随笔為你收集整理的Spring Cloud 入门 之 Ribbon 篇(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。