這篇文章主要是介紹一下ribbon的用法,我們都知道ribbon是負載均衡,但是卻不知道他是怎么樣的負載均衡,怎么用,能干嘛?
● 其實,簡單的說,Spring Cloud Ribbon是基於Netfilx Ribbon實現的一套客戶端 負載均衡的工具
Ribbon是Netfilx發布的開源項目,主要功能是提供客戶端的軟件負載均衡算法,將Netfilx的中間層服務連接在一起,Ribbon客戶端組件提供一系列完善的配置如連接超時,重試等,簡單的說,就是在配置文件中列出Load Balander(簡稱LB)后面所有的機器,Ribbon會自動的幫助你基於某種規則(如簡單輪詢,隨機連接等)去連接這些機器,我們也很容易使用Ribbon實現自定義的負載均衡算法
測試一下ribbon的用法,在網上找了好久,終於找到一個博主的架構流程圖,我覺得還是比較符合ribbon實現的具體用法,簡單易懂,一看就明白
實現這個ribbon的測試必須得有兩個服務端和一個客戶端,這都看到了吧。所以接下來,要創建服務端了
首先,這是在上篇文章的基礎上實現的,eureka已經有了,直接創建服務一,命名為study-ms,一定要選中這個,別問為啥,自己百度,請耐心看下去
●添加配置文件,在application.properties里面,內容是:
server.port=8003 spring.application.name=study-ms eureka.client.service-url.defaultZone=http://localhost:8001/eureka/
●添加pom.xml
<parent>
<groupId>com.study</groupId>
<artifactId>study-cloud</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../study-cloud/pom.xml </relativePath><!-- lookup parent from repository -->
</parent>
<groupId>com.study</groupId>
<artifactId>study-ms</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>study-ms</name>
<description>Demo project for Spring Boot</description>
<dependencies>
<dependency>
<groupId>com.study</groupId>
<artifactId>study-entity</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--配置中心jar包-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<!--MyBatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- web模塊 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
●在啟動類上加@EnableEurekaClient,截圖省略......
●添加一個controller實現類,加一個test測試方法
這個時候,服務一就創建好了
其次,服務二的創建方法同樣,照着上面的整就行了,連controller都是寫的一樣的哦,這里命名為study-toms,唯一不同的是,服務端口不一樣,配置文件如下:
△ 看清楚了,study-ms和study-toms這倆服務端,只有端口不一樣,一個是8003,一個是8004,其他的都是一模一樣的,
這里有個非常重要的點就是,這里服務的命名是一樣的,為啥?往下看吧!
最后,倆服務端創建好了,接下來就是創建客戶端了,命名為study-web
●application.properties 配置文件如下:
●pom.xml
<parent>
<groupId>com.study</groupId>
<artifactId>study-cloud</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../study-cloud/pom.xml </relativePath><!-- lookup parent from repository -->
</parent>
<groupId>com.study</groupId>
<artifactId>study-web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>study-web</name>
<description>Demo project for Spring Boot</description>
<dependencies>
<dependency>
<groupId>com.study</groupId>
<artifactId>study-entity</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- 單元測試 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- web模塊 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
</dependencies>
●啟動類上添加注解和方法
●新增一個訪問的controller類,添加一個test方法,注意這個訪問路徑,服務名字是study-ms
最最后,依次啟動 注冊中心study-eureka(8001)、服務端一 study-ms(8003)、服務端二 study-toms(8004)、客戶端 study-web(8002)
這個時候會看到STUDY-MS是對應兩個服務的,這就是上面為啥配置的時候把服務名字寫的一樣的原因了,因為這是本地測試,如果是不同服務器上啟動同一個服務就會這樣
繼續,通過瀏覽器訪問路徑http://localhost:8002/test,多刷新幾次你會發現結果:
這就是客戶端的負載均衡啦,理解可能不夠完善,歡迎交流和指正