1.Feign簡介
Feign 是在 Ribbon 的基礎上進行了一次改進,是一個使用起來更加方便的 HTTP 客戶端,Ribbon 和 Feign 都是用于呼叫其他服務的,方式不同,Feign 則是在 Ribbon 的基礎上進行了一次改進,采用介面的方式,將需要呼叫的其他服務的方法定義成抽象方法即可,不需要自己構建 http 請求,不過要注意的是抽象方法的注解、方法簽名要和提供服務的方法完全一致,然后在上面添加注解即可 ,將需要呼叫的其他服務的方法定義成抽象方法即可, 不需要自己構建 http 請求,使得撰寫 客戶端變得非常容易,
區別:
1.啟動類使用的注解不同,Ribbon 用的是@RibbonClient,Feign 用的是@EnableFeignClients,
2.服務的指定位置不同,Ribbon 是在@RibbonClient 注解上宣告,Feign 則是在定義抽象方法的介面中使用@FeignClient 宣告和在啟動類添加@EnableFeignClients實作啟用,
3.呼叫方式不同,Ribbon 需要自己構建 http 請求,模擬 http 請求然后使用 RestTemplate 發送給其他服務,步驟相當繁瑣.

2.openFeign和Feign的區別
1)Feign是Spring Cloud組件中一個輕量級RESTful的HTTP服務客戶端,Feign內置了Ribbon,用來做客戶端負載均衡,去呼叫服務注冊中心的服務,Feign的使用方式是:使用Feign的注解定義介面,呼叫介面,就可以呼叫服務注冊中心的服務,
1 <dependency>
2 <groupId>org.springframework.cloud</groupId>
3 <artifactId>spring-cloud-starter-feign</artifactId>
4 </dependency>
2)OpenFeign目前是Spring Cloud 二級子專案,而Feign指的是Netflix下的Feign,現在我們學習的是OpenFeign,是Spring提供的,
并且OpenFeign是Spring Cloud在Feign的基礎上支持了SpringMVC的注解,如@RequestMapping等等,OpenFeign的@FeignClient可以決議SpringMVC的@RequestMapping注解下的介面,并通過動態代理的方式產生實作類,實作類中.
1 <dependency>
2 <groupId>org.springframework.cloud</groupId>
3 <artifactId>spring-cloud-starter-openfeign</artifactId>
4 </dependency>
3.feign實踐
第一步:在服務消費方sca-consumer,添加專案依賴(SpringCloud團隊基于OpenFeign研發了starter),代碼參考上面:

第二步:在啟動類上添加@EnableFeignClients注解,代碼如下:

第三步:定義Http請求API,基于此API借助OpenFeign訪問遠端服務,代碼如下:
其中,@FeignClient描述的介面底層會為其創建實作類,

fallbackFactory=后備工廠.class解釋:
當我們在進行遠程服務呼叫時,假如呼叫的服務突然不可用了或者呼叫程序超時了,怎么辦呢?一般服務消費端會給出具體的容錯方案,
用于定義服務呼叫超時,網路阻塞等現象發生時,一種應對措施或處理機制,參考ruoyi.vip官網
介面:

工廠類:

第四步:所以我們可以模仿他,寫一個自己需要的FallbackFactory


feign:
hystrix:
enabled: true #默認為flase
feign的Hystrix支持默認關閉,需要手動設定啟動feign方式呼叫時的服務中斷處理機制,不然會導致fallbackFactory失效,
第四步:創建 消費方控制層Controller中并添加feign訪問,代碼如下:

4. 測驗

當我們給提供方加一個睡眠時(模仿網路中的阻塞)feign會有一個默認超時的時間,


這時,會把錯誤發送給維護人員,因為沒有定義錯誤資訊回傳所以為null
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/301008.html
標籤:其他
上一篇:功耗是如何影響計算機性能的?
