Spring-Cloud-Netflix-Ribbon&Feigen

負載均衡Ribbon

負載均衡概述

  1. 實際環境中,咱們每每會開啓不少個goods-service的集羣。此時咱們獲取的服務列表中就會有多個,到底該訪問哪個呢
  2. 如何從多臺服務器當中, 均衡的調用

Spring Cloud Ribbon

  1. Spring Cloud Ribbon是基於Netflix Ribbon實現的一套客戶端負載均衡的工具。
  2. Ribbon是Netflix發佈的開源項目,主要功能是提供客戶端的軟件負載均衡算法,將Netflix的中間層服務鏈接在一塊兒。
  3. Ribbon是Netflix發佈的負載均衡器,Ribbon默認爲咱們提供了不少負載均衡算法,
  4. 例如輪詢、隨機等。固然,咱們也可爲Ribbon實現自定義的負載均衡算法。 在Spring
  5. Cloud中,當Ribbon與Eureka配合使用時,Ribbon可自動從Eureka Server獲取服務提供者地址列表,
  6. 並基於負載均衡算法,請求其中一個服務提供者實例。展現了Ribbon與Eureka配合使用時的架構。

Ribbon負載均衡配置

  1. 在Eureka當中已經包換了Ribbon,因此咱們不須要單獨添加依賴
    在這裏插入圖片描述
  2. 在RestTemplatet的Bean上再添加一個註解@LoadBalanced
    在這裏插入圖片描述
  3. 在控制器當中定義要調用服務的實例名稱
    在這裏插入圖片描述
    默認是輪詢
    在這裏插入圖片描述
    在這裏插入圖片描述

負載均衡算法

  1. 隨機
  2. 輪詢
  3. hash:根據ip地址進行hash,經過ip值模於服務的數量,從而肯定訪問認證
  4. 最少訪問

這些算法, 都不須要要咱們去寫, 直接使用一個Robbin進行操做java

核心組件IRule

IRule是是Ribbon對於負載均衡策略實現的接口web

默認實現IRule接口的類:算法

  1. RoundRobinRule:輪詢
  2. RandomRule:隨機
  3. AvailabilityFilteringRule:會先過濾因爲屢次訪問故障處於斷路器跳閘狀態 的服務,還有併發的鏈接數據超過閾值的服務,而後對剩餘的服務列表按照輪詢策略進行選取
  4. WeightedResponseTimeRule:根據平均響應時間計算全部服務的權重,響應時間越快權重越大,剛啓動時若是統計信息不足,則使用RoundRobinRule策略,等統計信息足夠時後,會切換到WeightedResponseTieRule
  5. RetryRule:先按照RoundRobinRule的策略獲取服務,若是獲取服務失敗,則在制定時間內會重試,再獲取不到, 則放棄
  6. BestAvailableRule:會先過濾掉因爲屢次訪問故障,而處於斷路器跳閘的服務,而後選擇一個併發量最小的服務
  7. ZoneAvoidanceRule:默認規則,符合判斷Server所在區域的性能和server的可用性選擇服務器

IRule配置:在啓動類添加
在這裏插入圖片描述spring

@Bean
    public IRule Irule(){
        return new RandomRule();//隨機
    }

不一樣服務設置不一樣的策略

步驟:服務器

  1. 新建兩個order和order1的子模塊
    在這裏插入圖片描述
  2. 添加依賴
<dependencies>
        <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>
    </dependencies>
  1. 複製goods的文件到order,order1並修更名稱
    在這裏插入圖片描述
  2. 修改配置文件
    在這裏插入圖片描述
    在這裏插入圖片描述
  3. 建立config包,寫goods和order的負載均衡配置
    在這裏插入圖片描述
    goodsconfig:
@Configuration
public class goodsConfig {
    @Bean
    public IRule goods(){
        return new RoundRobinRule();
    }
}

orderconfig:架構

@Configuration
public class OrderConfig {
    @Bean
    public IRule order(){
        return new RandomRule();
    }
}
  1. 啓動類添加
    在這裏插入圖片描述
    刪除:
    在這裏插入圖片描述

Feigen

概述:併發

直接使用RestTemplate存在問題:在請求接口時,
路徑仍存在問題,只解決了服務名稱,沒有解決服務後,功能路徑問題,由於有多是別人開發的, 你不知道後面功能路徑是什麼app

  1. 什麼是Feign?
  1. Feign是一個聲明式WebService客戶端。 Feign旨在使編寫Java Http客戶端變得更容易。
  2. Feign在RestTemplate基礎上作了進一步封裝,由他來幫助咱們定義和實現依賴服務接口的定義
  3. Feign能夠把請求進行隱藏,你不用再本身拼接url,拼接參數等等操做,一切都交給Feign去作。
  4. 調用時,使用的負載均衡,是當前客戶端配置的負載均衡規則

使用步驟:

  1. 在客戶端引入依賴:
    在這裏插入圖片描述
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
  1. 在啓動類上面加上註解:@EnableFeignClients
    在這裏插入圖片描述
  2. 建立服務FeignClient,建立一個service文件夾,在該文件下建立一個接口,在接口加上添加@FeignClient()註解 參數就是你的微服務名字
    在這裏插入圖片描述
@FeignClient(name= "client-goods")
public interface goodsFeignClient {
    @RequestMapping("/getGoods.do")
    public Object getGoods();
}
  1. 在控制器當中進行調用
    在這裏插入圖片描述
@Autowired
    goodsFeignClient goodsFeignClient;
 	@RequestMapping("/getGoods.do")
    public ResponseResult getGoods(){
        return ResponseResult.success("操做成功",
                goodsFeignClient.getGoods());
    }
  1. 啓動訪問localhost:5000/getGoods.do
    在這裏插入圖片描述
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息