3、Spring Cloud 服務消費者-初探Ribbon

一、服務發現與消費
通過上面的內容與實踐,我們已經搭建起微服務架構中的核心組件——服務註冊中心(包括單點模式和高可用模式)。並且成功的將服務註冊到了註冊中心上,現在我們已經有了服務註冊中心和服務提供者,下面我們會構建一個服務消費者,他主要有兩個功能:發現服務,消費服務。其中,服務發現的任務是由Eureka的客戶端完成的,服務消費的任務是由Ribbon完成。Ribbon是一個基於HTTP和TCP的客戶端負載均衡器,他可以通過配置在客戶端中的ribbonServerList服務端列表去輪詢訪問達到負載均衡的作用。當ribbon和Eureka聯合使用時,ribbon的服務實例清單RibbonServerList會被DiscoveryEnabledNIWSServerList重寫,擴展成從Eureka註冊中心獲取服務列表。同時他也會用NIWSDiscoveryPing來取代IPing,他將責任委託給Eureka來確定服務端是否啓動!

二、將eureka-service-hello服務註冊兩個實例


打包啓動eureka-service-hello:
java -jar eureka-service-hello.jar --spring.profiles.active=hello1
java -jar eureka-service-hello.jar --spring.profiles.active=hello2

查看註冊中心:

我們可以看見有兩個註冊中心,兩個eureka-service-hello。


三、構建服務消費者
創建一個新的工程,名字叫做:ribbon-consumer-hello,pom.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<modelVersion>4.0.0</modelVersion>

<groupId>com.wl.test</groupId>
<artifactId>ribbon-consumer-hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>ribbon-consumer-hello</name>
<description>服務消費者,消費hello服務</description>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Dalston.SR5</spring-cloud.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
新增了一個spring-cloud-starter-ribbon依賴。

配置application.yml


修改啓動類:

通過@LoadBalanced開啓客戶端負載均衡!

新增controller:這裏是根據你配置的 spring.application.name 來進行查找服務。
注意:這個 spring.application.name 是服務名,不是instance-id,一個服務可能有很多實例,所有一個 spring.application.name  可以對應很多的instance-id。


測試服務消費者:


訪問 http://localhost:1111/consumer-hello 測試服務:
第一次訪問:


第二次訪問:


可以看見,我們進行了客戶端的負載均衡!nginx的反向代理和LVS屬於服務端的負載均衡。
什麼是客戶端的負載均衡:就是客戶(在這裏是eureka的服務消費者)知道自己調用的是哪個服務實例,決定權在客戶手中
什麼是服務端的負載均衡:比如nginx的反向代理就是典型的服務端負載均衡,用戶只需要訪問nginx服務器,完全不瞭解具體是哪臺服務器響應的自己,決定權在服務端手裏!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章