1. 程式人生 > 實用技巧 >1. feign的使用及原理

1. feign的使用及原理

一:Feign介紹

  Feign 的英文表意為“假裝,偽裝,變形”, 是一個http請求呼叫的輕量級框架,可以以Java介面註解的方式呼叫Http請求,而不用像Java中通過封裝HTTP請求報文的方式直接呼叫。Feign通過處理註解,將請求模板化,當實際呼叫的時候,傳入引數,根據引數再應用到請求上,進而轉化成真正的請求,這種請求相對而言比較直觀。 Feign被廣泛應用在Spring Cloud 的解決方案中,是學習基於Spring Cloud 微服務架構不可或缺的重要元件。 Feign支援多種註解,例如Feign自帶的註解或者JAX­RS註解等。Spring Cloud對Feign進行了增強,使其支援Spring MVC註解,另外還整合了Ribbon和Eureka,
從而使得Feign的使用更加方便.

二. Ribbon VS Feign

feign和ribbon是Spring Cloud的Netflix中提供的兩個實現軟負載均衡的元件,Ribbon和Feign都是用於呼叫其他服務的,方式不同。Feign則是在Ribbon的基礎上進行了一次改進,採用介面的方式。
將需要呼叫的其他服務的方法定義成抽象方法即可,不需要自己構建 http 請求。
不過要注意的是抽象方法的註解、方法簽名要和提供服務的方法完全一致

1.啟動類使用的註解不同,Ribbon 用的是@RibbonClient,Feign 用的是@EnableFeignClients。

2.服務的指定位置不同,Ribbon 是在@RibbonClient 註解上宣告,Feign 則是在定義抽象方法的介面中使用@FeignClient 宣告。

3.呼叫方式不同,Ribbon 需要自己構建 http 請求,模擬 http 請求然後使用 RestTemplate 傳送給其他服務,步驟相當繁瑣。

個人覺得主要原因是這個

Feign

Feign 是在 Ribbon 的基礎上進行了一次改進,是一個使用起來更加方便的 HTTP 客戶端。採用介面的方式, 只需要建立一個介面,然後在上面添加註解即可 ,將需要呼叫的其他服務的方法定義成抽象方法即可, 不需要自己構建 http 請求。然後就像是呼叫自身工程的方法呼叫,而感覺不到是呼叫遠端方法,使得編寫 客戶端變得非常容易。

Ribbon

Ribbon 是一個基於 HTTP 和 TCP 客戶端 的負載均衡的工具。它可以 在客戶端 配置 RibbonServerList(服務端列表),使用 HttpClient 或 RestTemplate 模擬 http 請求,步驟相對繁瑣。

三. 在工程中引入feign

1. 加入feign依賴

<!-- 服務之間http呼叫, 引入feign -->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2. 添加註解

在啟動類增加註解

@EnableFeignClients

3. 修改工程為普通的jar

我們即將建立的這個工程, 專門用來管理維護feign呼叫請求

因為該工程式一個普通的jar 不需要打可執行的jar

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId> 5     
            <artifactId>maven‐jar‐plugin</artifactId>
        </plugin>
    </plugins>
</build>

4. 編寫宣告式介面

@FeignClient(name="product‐center")
publicinterfaceProductCenterFeignApi{

  /**
   * 宣告式介面,遠端呼叫http://product‐center/selectProductInfoById/{productNo}
   * @param productNo
   * @return
   */
  @RequestMapping("/selectProductInfoById/{productNo}")
  ProductInfo selectProductInfoById(@PathVariable("productNo") String productNo);
}

在order專案中配置

5. 細粒度配置

5.1 設定日誌列印級別

as