Spring Cloud:使用 Feign 實現負載均衡詳解
閱讀文字大概需要 3 分鐘。
前面幾篇文章,對 Ribbon 負載均衡做了詳細的分析,這一節來介紹一下使用 Feign 負載均衡。在介紹之前,我們先來對 Feign 做一下簡單的介紹,先來理解一下什麼是 Feign。
1. Feign 是什麼?
我們看一下官方的解釋:Feign 是一個宣告式 WebService 客戶端。使用 Feign 能讓編寫的 WebService 客戶端更加簡潔,它的使用方法式定義一個介面,然後在上面新增註解。
Spring Cloud 對 Feign 進行了封裝,使其支援了 Spring MVC 標準註解和 HttpMessageConverters。Feign 可以與 Eureka 和 Ribbon 組合使用以支援負載均衡。
2. 為什麼要使用 Feign?
Feign 旨在使編寫 Java Http 客戶端變得更容易。前面在使用 Ribbon + RestTemplate 時,利用 RestTemplate 對 http 請求的封裝處理,形成了一套模板化的呼叫方法。但是在實際開發中,由於對服務依賴的呼叫可能不止一處,往往一個介面會被多處呼叫,所以通常都會針對每個微服務自行封裝一些客戶端類來包裝這些依賴服務的呼叫。
所以,Feign 在此基礎上做了進一步的封裝,由它來幫助我們定義和實現依賴服務介面的定義。使用 Feign 只需要建立一個介面並使用一個註解來配置它即可。
這就類似於我們在 dao 層的介面上標註 @Mapper 註解一樣。這樣的話,即完成了對服務提供方的介面繫結,簡化了使用 Spring Cloud Ribbon 時的開發量。我們用例項來說明。
3. Feign 的使用
3.1 依賴匯入
<!--eureka Client-->
<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>
3.2 啟動類註解配置
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class OrderConsumerFeign {
public static void main(String[] args) {
SpringApplication.run(OrderConsumerFeign.class, args);
}
}
啟動類需要新增註解 @EnableFeignClients,表示啟用 Feign 客戶端。
3.3 Feign 客戶端
我們先來回憶一下,提供訂單的服務名稱為:MICROSERVICE-ORDER,然後訂單服務中提供的兩個獲取訂單資訊的介面url如下:
/**
* feign客戶端
* @author shengwu ni
*/
@FeignClient(value = "MICROSERVICE-ORDER")
public interface OrderClientService {
@GetMapping("/provider/order/get/{id}")
TOrder getOrder(@PathVariable(value = "id") Long id);
@GetMapping("/provider/order/get/list")
List<TOrder> getAll();
}
可以看到,Feign 客戶端要新增 @FeignClient 註解,value 屬性表示作用到哪個微服務上,這裡表示負載均衡作用到請求訂單服務上。要記住,Feign 也是客戶端的負載均衡。
方法內定義了兩個介面,介面上即和普通的 SpringMVC 沒什麼區別,url 即訂單提供服務的url。這就是 Feign 客戶端,透過註解 + 介面的方式來和訂單服務的介面繫結。
3.4 Feign 客戶端的使用
定義好了 Feign 客戶端介面後,我們就可以在程式碼裡透過 @Resource 正常引入進來,然後透過普通的方法呼叫即可實現對訂單服務的呼叫,如下:
@RestController
@RequestMapping("/consumer/order")
public class OrderConsumerController {
/**
* 上面定義的 Feign Client
*/
@Resource
private OrderClientService orderClientService;
@GetMapping("/get/{id}")
public TOrder getOrder(@PathVariable Long id) {
return orderClientService.getOrder(id);
}
@GetMapping("/get/list")
public List<TOrder> getAll() {
return orderClientService.getAll();
}
}
啟動 eureka 叢集、三個訂單提供服務和這個帶有 Feign 的服務消費方(埠 9001)。透過在瀏覽器中訪問:可以看到,輪流訪問三個訂單服務。說明 Feign 預設是整合了 Ribbon 的輪詢方案。
4. Feign 如何結合 Ribbon 切換均衡演算法
以上就是 Feign 的使用,很簡單,也符合我們平時的介面呼叫習慣。但是這是預設的輪詢負載均衡演算法。在上一節我們知道,Ribbon 中支援很多自帶的均衡演算法,我們只要在程式碼中根據具體情況,選擇合適的均衡演算法即可。甚至我們可以選擇自己自定義的均衡演算法。
那麼使用 Feign 的時候,如何去切換到 Ribbon 中其他均衡策略呢?甚至切換到自定義的策略呢?
也很簡單,我們可以在 application.yml 配置檔案中來指定,如下:
# feign和ribbon結合,指定策略。feign預設的是輪詢的策略,這裡的配置可以自定義
MICROSERVICE-ORDER:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
MICROSERVICE-ORDER 表示作用到哪個微服務,com.netflix.loadbalancer.RandomRule 即前面介紹 Ribbon 時裡面的隨機策略,當然,我們也可以指定為其他策略,包括我們自己定義的,只要把相應的包路徑寫到這即可,很方便。
重新啟動一下服務消費方的程式,訪問上面那個測試 url,可以看到三個訂單服務是隨機呼叫的,說明配置生效。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31558358/viewspace-2565058/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Spring Cloud:使用Ribbon實現負載均衡詳解(上)SpringCloud負載
- Spring Cloud:使用Ribbon實現負載均衡詳解(下)SpringCloud負載
- Spring cloud(3)-負載均衡(Feign,Ribbon)SpringCloud負載
- Spring Cloud Ribbon負載均衡SpringCloud負載
- 4. Spring Cloud Ribbon 實現“負載均衡”的詳細配置說明SpringCloud負載
- Spring Cloud Gateway之負載均衡SpringCloudGateway負載
- 客服端負載均衡:Spring Cloud Ribbon負載SpringCloud
- Spring Cloud入門教程-Ribbon實現客戶端負載均衡SpringCloud客戶端負載
- 使用LVS實現負載均衡原理及安裝配置詳解負載
- 負載均衡詳解負載
- Spring Cloud負載均衡神器——Ribbon簡介與基本使用SpringCloud負載
- Spring Cloud:自定義 Ribbon 負載均衡策略SpringCloud負載
- Spring Cloud Ribbon 客戶端負載均衡SpringCloud客戶端負載
- Nginx負載均衡詳解Nginx負載
- 使用YARP來實現負載均衡負載
- Spring Cloud之負載均衡元件Ribbon原理分析SpringCloud負載元件
- Ribbon實現負載均衡負載
- GRPC 負載均衡實現RPC負載
- nginx實現負載均衡Nginx負載
- Kubernetes上的負載均衡詳解負載
- 微服務Spring Cloud17_負載均衡Ribbon6微服務SpringCloud負載
- SpringCloud微服務中使用RestTemplate+Ribbon實現負載均衡(實現方法+實現原理+替換負載均衡策略)SpringGCCloud微服務REST負載
- HaProxy 實現 MySQL 負載均衡MySql負載
- 微服務通訊之feign整合負載均衡微服務負載
- windows第七層負載均衡 基於IIS的ARR負載均衡詳解Windows負載
- F5負載均衡系列教程八【負載均衡演算法詳解】負載演算法
- java Spring Cloud企業快速開發架構之Ribbon結合RestTemplate實現負載均衡JavaSpringCloud架構REST負載
- Spring Cloud Feign的檔案上傳實現SpringCloud
- windows伺服器第四層負載均衡_基於NLB負載均衡詳解Windows伺服器負載
- nginx+tomcat實現負載均衡NginxTomcat負載
- dubbo(三):負載均衡實現解析負載
- Python實現簡單負載均衡Python負載
- Spring Cloud Feign設計原理(轉載)SpringCloud
- Spring Cloud應用(三)---feign使用SpringCloud
- Spring Cloud feign使用okhttp3SpringCloudHTTP
- 常用負載均衡詳解(圖文總結)負載
- 負載均衡 - MQTT Broker 叢集詳解(一)負載MQQT
- Spring Cloud:使用Hystrix實現斷路器原理詳解(下)SpringCloud