天天看點

Feign聲明式用戶端接口1、介紹2、Feign 遠端調用3、Feign 內建 Ribbon:負載均衡、重試4、Feign 內建 Hystrix:降級、熔斷、監控5、總結

1、介紹

Feign是Netflix開發的聲明式、模闆化的HTTP用戶端, Feign可以幫助我們更快捷、優雅地調用HTTP API。

在Spring Cloud中,使用Feign非常簡單——建立一個接口,并在接口上添加一些注解,代碼就完成了。Feign支援多種注解,例如Feign自帶的注解或者JAX-RS注解等。

Spring Cloud對Feign進行了增強,使Feign支援了Spring MVC注解,并整合了Ribbon和Eureka,進而讓Feign的使用更加友善。

Spring Cloud Feign是基于Netflix feign實作,整合了Spring Cloud Ribbon和Spring Cloud Hystrix,除了提供這兩者的強大功能外,還提供了一種聲明式的Web服務用戶端定義的方式。

Spring Cloud Feign幫助我們定義和實作依賴服務接口的定義。在Spring Cloud feign的實作下,隻需要建立一個接口并用注解方式配置它,即可完成服務提供方的接口綁定,簡化了在使用Spring Cloud Ribbon時自行封裝服務調用用戶端的開發量。

Spring Cloud Feign具備可插拔的注解支援,支援Feign注解、JAX-RS注解和Spring MVC的注解。

  • 遠端調用 - RestTemplate
  • ribbon - @LoadBalanced,配置重試參數
  • hystrix

內建工具:

  • 遠端調用
  • ribbon - 負載均衡、重試
  • hystrix - 降級、熔斷

2、Feign 遠端調用

2.1、Feign 提供了聲明式用戶端,隻需要定義一個接口,就可以通過接口做遠端調用。具體調用代碼通過動态代理添加。

// 調用商品服務的遠端調用接口
// 通過注解配置3件事:調用哪個服務,調用什麼路徑,向這個路徑送出什麼參數
@FeignClient(name="item-service")
public interface ItemFeignClient {
    @GetMapping("/{orderId}")
    JsonResult<List<Item>> getItems(@PathVariable String orderId);
}
           

2.2、 添加Feign聲明式用戶端

(1) 添加Feign聲明式用戶端

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
           

(2)啟動類加

@EnableFeignClients

(3)定義聲明式用戶端接口

eg:

  • ItemFeignClient
  • UserFeignClient
  • OrderFeignClient

(4)添加一個測試用的控制器,使用三個聲明式用戶端接口調用遠端服務

3、Feign 內建 Ribbon:負載均衡、重試

Feign 預設啟用了Ribbon的負載均衡和重試,0配置

預設重試參數:

  • MaxAutoRetries=0
  • MaxAutoRetriesNextServer=1
  • ReadTimeout=1000

重試參數配置

有需要則設定

# 對所有服務都有效
ribbon:
  MaxAutoRetries: 1
  
# 對 item-service 單獨配置,對其他服務無效
item-service:
  ribbon: 
    MaxAutoRetries: 0
           

4、Feign 內建 Hystrix:降級、熔斷、監控

預設不啟用 Hystrix,Feign不推薦啟用hystrix(後面再分析)

如果有特殊需求要啟用hystrix,首先做基礎配置

1、添加 hystrix 的完整依賴

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
           

2、添加

@EnableCircuitBreaker

3、yml配置

feign.hystrix.enabled=true

# 啟動Hystrix

# 啟動Hystrix
feign:
  hystrix:
    enabled: true
           

4.1、降級

之前:加的是

@HystrixCommand(fallbackMethod=“ . . . ”)

現在:在聲明式用戶端接口的注解中,指定一個降級類

@FeignClient(name="item-service", fallback=降級類.class)
public interface ItemFeignClient {
    ....
}
           

降級類要作為聲明式用戶端接口的子類來定義

其實作類要用

@Component

來标注

4.2、熔斷

熔斷會自動觸發:10秒20次請求,50%失敗,執行了降級代碼。

4.3、監控:用 actuator 暴露 hystrix.stream 監控端點

(1)添加actuator 依賴

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
           

(2)暴露監控端點:m.e.w.e.i=hystrix.stream

# 暴露監控端點
management:
  endpoints:
    web:
      exposure:
        include: hystrix.stream
           

(3)通路測試:http://localhost:3001/actuator/hystrix.stream

(4)通過調用背景服務,産生監控資料

5、總結

Feign聲明式用戶端接口1、介紹2、Feign 遠端調用3、Feign 內建 Ribbon:負載均衡、重試4、Feign 內建 Hystrix:降級、熔斷、監控5、總結

繼續閱讀