Ribbon 使用入門


Ribbon 是 Netflix 下的負載均衡項目,在集群中為各個客戶端的通信提供支持,主要實現中間層應用程序的負載均衡,提供以下特性:

  • 負載均衡器,可支持插拔式的負載均衡規則
  • 對多種協議提供支持,例如HTTP、TCP
  • 集成了負載均衡功能的客戶端

Ribbon 可以與 Eureka 服務注冊中心整合使用,並且被整合到 Spring Cloud Netflix 子項目中。Ribbon 主要有三大模塊,模塊說明如下:

  • ribbon-core:該模塊為Ribbon項目的核心,主要包括負載均衡器接口定義、客戶端接口定義、內置的負載均衡實現等API
  • ribbon-eureka:為 Eureka 客戶端提供的負載君均衡實現類
  • ribbon-httpclient:對 Apache 的 HttpClient 進行封裝,該模塊提供了含有負載均衡功能的 REST 客戶端

Ribbon 的負載均衡器主要是與集群中的各個服務器進行通信,因此負載均衡器需要提供維護服務器IP、DNS名稱等信息、根據特定邏輯在服務器列表中循環的功能,為了實現這些功能 Ribbon 的負載均衡器提供了以下三大模塊:

  • Rule:該組件用於處理從服務器列表中選擇那個服務器實例
  • Ping:該組件主要用定時器來確保服務器網絡可以連接
  • ServerList:服務器列表,可以通過靜態的配置確定負載的服務器,也可以動態指定服務器列表,如果動態指定服務器列表,則會有后台線程來刷新該列表

在使用 Ribbon 時,可以使用配置也可以使用代碼設置配置項,需要使用代碼來設置配置項,示例代碼如下:

ConfigurationManager.getConfigInstance()

.setProperty("MyRibbonClient.ribbon.listOfServers","localhost:8080,localhost:8002");

如果希望使用配置文件來設置項,在 src/main/resources 目錄創建 properties 文件,並在文件中增加配置項,格式如下:

<client>.<namespace>.<property>=<value>

其中,<client> 表示為客戶的名稱,聲明配置屬於那個客戶端,在使用 ClientFactory 時可傳入客戶端的名稱來獲取對應的實例;<namespace>為該配置的命名空間,默認為 ribbon;<property>為屬性名;<value>為屬性值;如果希望對全部客戶端生效,則配置格式如下:

<namespace>.<property>=<value>

   

Ribbon使用示例

  • 創建項目

    創建 maven 項目,命名為 ribbon-client,並增加 ribbon 依賴,POM.xml 內容如下:

    <?xmlversion="1.0"encoding="UTF-8"?>

    <projectxmlns="http://maven.apache.org/POM/4.0.0"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>org.lixue</groupId>

    <artifactId>ribbon-client</artifactId>

    <version>1.0-SNAPSHOT</version>

    <dependencies>

    <dependency>

    <groupId>com.netflix.ribbon</groupId>

    <artifactId>ribbon</artifactId>

    <version>2.2.2</version>

    </dependency>

    <dependency>

    <groupId>com.netflix.archaius</groupId>

    <artifactId>archaius-core</artifactId>

    <version>0.7.4</version>

    </dependency>

    <dependency>

    <groupId>com.netflix.ribbon</groupId>

    <artifactId>ribbon-loadbalancer</artifactId>

    <version>2.2.2</version>

    </dependency>

    <dependency>

    <groupId>com.netflix.ribbon</groupId>

    <artifactId>ribbon-core</artifactId>

    <version>2.2.2</version>

    </dependency>

    </dependencies>

    </project>

  • 增加配置文件

    src/main/resources 目錄創建 ribbon-client.properties 文件,並增加配置項,配置如下:

    MyRibbonClient.ribbon.listOfServers=localhost:8080,localhost:8002

       

  • 增加測試類

    package org.lixue.ribbon.client;

       

    import com.netflix.client.ClientFactory;

    import com.netflix.config.ConfigurationManager;

    import com.netflix.loadbalancer.ILoadBalancer;

    import com.netflix.loadbalancer.IRule;

    import com.netflix.loadbalancer.RoundRobinRule;

    import com.netflix.loadbalancer.Server;

       

    public class RibbonClient{

    public static void main(String[]args)throwsException{

    ConfigurationManager.loadCascadedPropertiesFromResources("ribbon-client");

    ILoadBalancerloadBalancer=ClientFactory.getNamedLoadBalancer("MyRibbonClient");

    Irule chooseRule=new RoundRobinRule();

    chooseRule.setLoadBalancer(loadBalancer);

    for(inti=0;i<10;i++){

    Server server=chooseRule.choose(null);

    System.out.println("request"+server.getHostPort());

    }

    }

    }

       

  • 測試驗證

    啟動項目,我們代碼獲取了10次的服務器,地址分別為 localhost:8080 localhost:8002 ,通過輸出結果可以發現,使用了輪詢調度算法來選擇服務器,輸出結果如下:

    request localhost:8002

    request localhost:8080

    request localhost:8002

    request localhost:8080

    request localhost:8002

    request localhost:8080

    request localhost:8002

    request localhost:8080

    request localhost:8002

    request localhost:8080

       


免責聲明!

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



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