首頁>Club>
官方文件中描述了該特性,但是又宣告不建議使用此特性,到底應該如何做呢?
8
回覆列表
  • 1 # 雲渺書齋

    Feign使用繼承特性,可以減少編碼量,也保證了路徑對映和引數的一致性。但是會導致服務提供者和服務消費者的耦合度太高,如果服務提供者修改了一個介面的定義,服務消費者也需要相應的修改,進而帶來很多未知的工作量,所以要慎重考慮。

    Fegin

    Spring Cloud Feign是一套基於Netflix Feign實現的宣告式服務呼叫客戶端。它使得編寫Web服務客戶端變得更加簡單。我們只需要透過建立介面並用註解來配置它既可完成對Web服務介面的繫結。它具備可插拔的註解支援,包括Feign註解、JAX-RS註解。它也支援可插拔的編碼器和解碼器。Spring Cloud Feign還擴充套件了對Spring MVC註解的支援,同時還整合了Ribbon和Eureka來提供均衡負載的HTTP客戶端實現。

    Feign原理

    Feign透過處理註解,將請求模板化,當實際呼叫的時候,傳入引數,根據引數再應用到請求上,進而轉化成真正的 Request 請求。透過Feign以及JAVA的動態代理機制,使得Java 開發人員,可以不用透過HTTP框架去封裝HTTP請求報文的方式,完成遠端服務的HTTP呼叫。

    微服務啟動啟動時,Feign會進行包掃描,掃描所有包下@FeignClient註解的介面,按照註解的規則,建立遠端介面的本地JDK Proxy代理例項。然後,將這些本地Proxy代理例項,注入到Spring IOC容器中。當定義的Feign中的介面被呼叫時,透過Java的動態代理來生成RequestTemplate。RequestTemplate中包含請求的所有資訊,如請求引數,請求URL等。RequestTemplate生成Request,然後將Request交給client處理,這個client預設是Java的HTTPUrlConnection,也可以是OKhttp、Apache的HTTPClient等。最後Client封裝成LoadBaLanceClient,結合ribbon負載均衡地發起呼叫。

    如果解決了你的疑惑,請點點關注,謝謝支援。

  • 2 # 寫程式設計師的程式碼

    官方給出的只是建議,他們也是考慮到feign的耦合度稍微高點而已,但是他的優點還是很多的,其實值得我們嘗試使用。

    Feign是一個基於介面的程式設計方式,開發者只需要宣告介面及配置註解,在排程介面方法時,SpringCloud就根據配置來排程對應的REST風格的請求,從其他微服務系統中獲取資料。為了啟用Feign,首先需要在springboot的啟動檔案中加入註解。這樣springboot就會啟動Feign並且到對應的包去掃描。然後在產品服務中加入介面宣告,注意這裡僅僅是一個介面宣告,並不需要實現類。

    3. 與Ribbon相比,Feign遮蔽掉了RestTemplate的使用,提供了介面宣告式的呼叫,使得程式可讀性高,同時在多次呼叫更為方便。

    綜上所述:

    使用繼承的方式時,控制器中的方法可以繼承介面中的requestMapping,不使用繼承的時候需要手工定義。

    feign的介面不可再繼承其它interface,否則報錯如下:Only single-level inheritance supported: RefactTestFeignService在SpringCloud中Feign支援繼承,但是不支援多層繼承(他人結論,未親自驗證)

    所以使用feign個人感覺利大於弊。

  • 3 # a能讓我更靠前

    我們用的就是繼承,帶來的好處是服務釋出方和消費方高度保持一致,直接透過整合看到有哪些服務和每個服務的引數,很方便。事實在實際開發中基本上不可能服務釋出方和消費方不存在依賴,比如實體的依賴。既然不能杜絕,何必要浪費這一優勢呢?但是要警惕過於複雜的依賴關係,要控制好依賴關係。

  • 中秋節和大豐收的關聯?
  • 生育二胎要隔多少年才能生?