1. 概述
本教程將描述 Spring Cloud Netflix Feign 和 Spring Cloud OpenFeign 之間的差異。
2. Feign
Feign 通過提供註解支持,使編寫 Web 服務客户端更加容易, 允許我們僅使用接口來實施我們的客户端。
Feign 最初由 Netflix 作為其 Netflix OSS 項目的一部分開發併發布。 如今,它是一個開源項目。
2.1. Spring Cloud Netflix Feign
Spring Cloud Netflix 將 Netflix OSS 產品集成到 Spring Cloud 生態系統中。這包括 Feign、Eureka、Ribbon 以及眾多其他工具和實用程序。但是,Feign 擁有自己的 Spring Cloud Starter,以便僅訪問 Feign。
2.2. OpenFeign
最終,Netflix決定停止內部使用Feign並停止對其開發。由於這一決定,Netflix將Feign完全轉移到開源社區,作為名為OpenFeign的新項目進行開發。
幸運的是,它繼續從開源社區獲得巨大的支持,併發布了許多新功能和更新。
2.3. Spring Cloud OpenFeign
類似於其前身,Spring Cloud OpenFeign 將前身項目集成到 Spring Cloud 生態系統中。
方便地,這次集成增加了對 Spring MVC 註解的支持,並提供了相同的 HttpMessageConverters。
讓我們比較一下 Spring Cloud OpenFeign 中找到的 Feign 實現與使用 Spring Cloud Netflix Feign 的實現之間的差異。
3. 依賴項
首先,我們需要將 <em><a href="https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-feign">spring-cloud-starter-feign</a></em> 和 <em><a href="https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies">spring-cloud-dependencies</a></em> 依賴項添加到我們的 <em>pom.xml</em> 文件中:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<versionId>1.4.7.RELEASE</versionID>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR8</version>
<type>pom</type>
<scope>import</scope>
</dependency>請注意,該庫僅與 Spring Boot 1.4.7 或更早版本兼容。因此,我們的 pom.xml 必須使用與 Spring Cloud 依賴項兼容的版本。
4. 使用 Spring Cloud Netflix Feign 實現
現在,我們可以使用 @EnableFeignClients 來啓用對使用 @FeignClient 的任何接口的組件掃描。
對於我們使用 Spring Cloud Netflix Feign 項目開發的每個示例,我們都會使用以下導入語句:
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;舊版本和新版本的各項功能實現方式完全一致。
5. 使用 Spring Cloud OpenFeign 實現
與使用 Spring Netflix Feign 的示例類似,我們的 Spring Cloud OpenFeign 教程包含相同的示例。
唯一不同之處在於,我們的導入語句來自不同的包。
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.EnableFeignClients;其他內容保持不變,這也不足為奇,這是因為這兩個庫之間的關係。
6. 比較
本質上,這兩個 Feign 實現是完全相同的。這歸功於 Netflix Feign 作為 OpenFeign 的祖先。
然而,Spring Cloud OpenFeign 包含了一些在 Spring Cloud Netflix Feign 中不可用的新選項和功能。
最近,我們獲得了對 Micrometer、Dropwizard Metrics、Apache HTTP Client 5、Google HTTP client 以及更多支持。
7. 結論
本文對比了 OpenFeign 和 Netflix Feign 的 Spring Cloud 集成方案。