Feign
1.
(1)Feign是簡化Java HTTP客戶端開發的工具,是通過處理注解生成Request,從而實現簡化Http API開發的目的,即開發人員可以使用注解的方式定制Request api模板,在發送請求http requst之前,feign通過處理注解的方式替換掉request模板中的參數,這種實現方式更為直接,可理解。
(2) Feign是一種聲明式,模板化的HTTP客戶端,可以做到使用HTTP請求遠程服務時能與調用本地方法一樣的編碼體驗,感知不到是遠程方法和HTTP請求.
2.
注解
@FeignClient:
為了讓Feign知道在調用方法時應該像哪個地址發送請求以及請求需要帶哪些參數,需要定義一個接口:
@FeignClient(name=”bimernet-core-service”)
Public interface CoreFeignClientService{
@RequestMapping(value=”/api/user/{id}”,method=RequestMethod.GET)
Public BySessionResponse getUserById(@PathVariable(“id”) String id);
}
說明:
@FeignClient:用於通知Feign組件對該接口進行代理(不需要編寫接口實現),使用者可直接通過@Autowired注入
@RequestMapping表示在調用該方法時需要向以上路徑發送GET請求
3.
運行機理:
Spring Cloud應用在啟動時,Feign會掃描標有@FeignClient注解的接口,生成代理,並注冊到Spring容器中,生成代理時,Feign會為每個接口方法創建一個RequestTemplate對象,該對象封裝了HTTP請求需要的全部信息,請求參數名,請求方法等都是在這個過程中確定的,Feign的模板化體現在這里。
例子中是將Feign與Eureka和Ribbon(?)組合使用,@FeignClient(name=”bimernet-core-service”)
意為通知Feign在調用接口時要向Eureka中查詢名為bimernet-core-service的服務,從而得到服務的URL
4.
總結:
通過Feign,我們能把遠程調用對開發者完全透明,得到與調用本地方法一致的編碼體驗,這一點與阿里Dubbo中暴露遠程服務的方式類似,區別在於Dubbo是基於私有二進制協議,而Feign本質上還是一個HTTP客戶端,如果在用Spring Cloud Netflix搭建微服務,那么Feign是最佳選擇。
5.
總結:
@FeignClient(name =””,fallBackMethod=””)中name屬性中使用的是Eureka服務發現,找到名為……的服務,然后找到對應的URL
FallBackMethod屬性使用的是Hystrix熔斷機制,服務斷掉的話就轉向別的方法,去替換請求失敗的服務。