SpringCloud 廣告系統實戰(五) - 廣告檢索系統(微服務呼叫)
0 聯絡我

2. 完整部落格連結
3. 個人知乎
4. gayhub
相關原始碼
本文會介紹使用 Ribbon 與 Feign 元件實現微服務之間的呼叫。
1 建立廣告檢索系統子模組
-
新建搜尋服務子模組
- 編輯 pom 檔案
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="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.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <!-- 指定父pom, 注意它是 javaedge-ad-service 的子模組 --> <parent> <artifactId>javaedge-ad-service</artifactId> <groupId>com.sss.ad</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <!-- 當前專案/模組的座標, groupId從父模組中繼承 --> <artifactId>ad-search</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <dependencies> <!-- Hystrix 監控 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId> </dependency> <!-- 監控端點, 採集應用指標 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- 引入 Web 功能 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Eureka 客戶端, 客戶端向 Eureka Server 註冊的時候會提供一系列的元資料資訊, 例如: 主機, 埠, 健康檢查url等 Eureka Server 接受每個客戶端傳送的心跳資訊, 如果在某個配置的超時時間內未接收到心跳資訊, 例項會被從註冊列表中移除 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!-- 引入 Feign, 可以以宣告的方式呼叫微服務 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <!-- 引入服務容錯 Hystrix 的依賴 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency> <!-- 引入服務消費者 Ribbon 的依賴 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency> <!-- Java Persistence API, ORM 規範 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- 資料庫連線 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!-- MySQL 驅動, 注意, 這個需要與 MySQL 版本對應 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.12</version> <scope>runtime</scope> </dependency> <!-- 通用模組 --> <dependency> <groupId>com.sss.ad</groupId> <artifactId>ad-common</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <!-- apache 提供的一些工具類 --> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.9</version> </dependency> <!-- 集合類操作 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-collections4</artifactId> <version>4.0</version> </dependency> <!-- binlog 監聽與解析: https://github.com/shyiko/mysql-binlog-connector-java --> <dependency> <groupId>com.github.shyiko</groupId> <artifactId>mysql-binlog-connector-java</artifactId> <version>0.13.0</version> </dependency> <!-- 解析配置檔案中的配置 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> </dependency> <!--kafka 依賴--> <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> <version>2.1.5.RELEASE</version> </dependency> </dependencies> <!-- SpringBoot的Maven外掛, 能夠以Maven的方式為應用提供SpringBoot的支援,可以將 SpringBoot應用打包為可執行的jar或war檔案, 然後以通常的方式執行SpringBoot應用 --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
2 基於 Ribbon 實現微服務呼叫
Client Side Load Balancer: Ribbon
Ribbon 是一個客戶端負載均衡器,可很好地控制HTTP和TCP客戶端的行為.
Feign已經使用Ribbon,所以若使用@FeignClient,則本節也適用也是必備知識點.
-
Ribbon 中的中心概念是指定客戶端的概念
每個負載平衡器是集合元件的一部分,它們一起工作以根據需要與遠端伺服器通訊,並且集合具有你將其作為應用程式開發人員(例如使用@FeignClient註解)的名稱.
Spring Cloud 使用 RibbonClientConfiguration 為每個命名的客戶端根據需要建立一個新的集合作為ApplicationContext.這包含 ILoadBalancer,RestClient和ServerListFilter.
2.1 新增 Ribbon
要在專案中包含Ribbon,請使用
group org.springframework.cloud
,artifact ID spring-cloud-starter-ribbon
的starter.


-
定義 demo 演示類
3 基於 Feign 實現微服務呼叫
Feign 是一個宣告式的Web服務客戶端.
這使得Web服務客戶端的寫入更加方便,要使用 Feign 建立一個介面,並對其添加註解。它提供了可插拔式的註解,包括Feign註解和JAX-RS註解。Feign還支援可插拔編碼器和解碼器.
Spring Cloud增加了對Spring MVC註解的支援,並使用Spring Web中預設使用的 HttpMessageConverters
.
Spring Cloud整合Ribbon和Eureka以在使用Feign時提供負載均衡的http客戶端.
3.1 如何加入Feign
要在專案中包含Feign,請使用group org.springframework.cloud
和artifact ID spring-cloud-starter-feign
的啟動器.
-
Spring Boot應用
- 介面檔案
@FeignClient
註解中,String 值(上面的eureka-client-ad-sponsor
)是一個任意的客戶端名稱,用於建立Ribbon負載均衡器,還可以使用url
屬性(絕對值或只是主機名)指定URL.
應用程式上下文中的bean的名稱是該介面的完全限定名,要指定自己的別名,可以使用@FeignClient
註釋的qualifier
值.
3.2 Feign Hystrix回退
Hystrix支援回退的概念 : 當電路斷開或出現錯誤時執行的預設程式碼路徑.
要為給定的 @FeignClient
啟用回退,請將 fallback
屬性設定為實現回退的類名.
