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進行操作

核心組件IRule

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

默認實現IRule接口的類:

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

IRule配置:在啟動類添加
在這里插入圖片描述

	@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存在問題:在請求接口時,
路徑仍存在問題,只解決了服務名稱,沒有解決服務后,功能路徑問題,因為有可能是別人開發的, 你不知道后面功能路徑是什么

  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
    在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM