Feign 與 Hystrix

Feign是一個聲明式的web服務客戶端,它使得web服務調用非常的簡單,當我們使用Feign時,Spring Cloud 整合了Ribbon和Eureka,從而為我們提供了一個負載均衡的Http客戶端。

一、Feign的使用

首先我們引入Feign的依賴,由於Feign要通過Eureka去獲取服務,所以也要引入Eureka-client:

Feign 與 Hystrix

然後再Spring Boot啟動類上打上@EnableFeignClients註解,使得應用可以使用FeignClient,如下:

Feign 與 Hystrix

最後編寫遠程調用接口,調用上一篇中提到的Order服務,如下:

Feign 與 Hystrix

其中,@FeignClient指明這個接口是一個FeignClient,value值是我們要從eureka註冊中心獲取的服務,由於eureka-client-order項目中 的spring.application.name是SERVICE-ORDER,所以我們這裡寫SERVICE-ORDER。

我們再寫個controller使用Feign去調用遠程服務,如下:

Feign 與 Hystrix

最後,我們修改一下eureka-client-order,啟動兩個服務,兩個服務的訂單狀態不同,如下:

Feign 與 Hystrix

大功告成,我們啟動4個服務:eureka註冊中心,order-node-1,order-node-2,feign。訪問我們的controller,並刷新,顯示結果如下:

Feign 與 Hystrix

說明feign的負載均衡已經啟用。

二、Hystrix熔斷

首先我們引入Hystrix的依賴:

Feign 與 Hystrix

並啟用Feign的Hystrix,

Feign 與 Hystrix

Feign封裝了所有方法的熔斷方法,Hystrix支持fallback的概念,在FeignClien中指定即可

Feign 與 Hystrix

指定fallback的類為OrderHystrix,我們新建OrderHystrix類並實現RemoteOrder接口:

Feign 與 Hystrix

這樣我們在調用遠程的/order/detail時,如果發生超時或者錯誤,就會調用getRemoteOrder()方法。 我們可以把eureka-client-order的兩個服務都停掉,然後進行訪問,結果如下:

Feign 與 Hystrix

說明熔斷機制起作用了。

項目示例地址:https://github.com/liubo-tech/spring-cloud-eureka。


分享到:


相關文章: