SpringCloud入門(三): Feign簡介與使用


Feign簡介

  Feign是一個http請求調用的輕量級框架,可以以Java接口注解的方式調用Http請求,幫助我們更加便捷、優雅地調用HTTP API。Feign其靈感來自Retrofit、JAXRS-2.0以及WebSocket。通過處理注解,將請求模板化,底層實際還是Ribbon,只是通過動態代理做了一次封裝。

Ribbon與Feign的區別

Ribbon和Feign都是用於調用其他服務的,不過方式不同。

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

2.服務的指定位置不同,Ribbon是在@RibbonClient注解上聲明,Feign則是在定義抽象方法的接口中使用@FeignClient聲明。

3.調用方式不同,Ribbon需要自己構建http請求,模擬http請求然后使用RestTemplate發送給其他服務,步驟相當繁瑣。Feign則是在Ribbon的基礎上進行了一次改進,采用接口的方式,將需要調用的其他服務的方法定義成抽象方法即可,不需要自己構建http請求。不過要注意的是抽象方法的注解、方法簽名要和提供服務的方法完全一致。

Feign入門

<!--1. 配置pom文件,引入在引入spring-cloud-starter-openfeign包 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

<!- 2. 編寫調用接口
    備注:name指定微服務的名稱,  path是指定服務消費者的調用前綴
->
@FeignClient(name = "ms-provider-order", path = "/order")
public interface MsCustomFeignOrderApi {
    @RequestMapping("/queryOrdersByUserId/{userId}")
    List<OrderVo> queryOrdersByUserId(@PathVariable("userId") String userId);

    @RequestMapping("/getRegisterInfo")
    String getRegisterInfo();
}

<!- 3. 在主啟動類上加入注解@EnableFeignClients注解 -->
@SpringBootApplication
@EnableFeignClients
public class FeignApplication {

    public static void main(String[] args) {
        SpringApplication.run(FeignApplication.class, args);
    }
}

 

備注:如果沒有加入@EnableFeignClients,在調用過程中會報Class has no fields的錯誤;

Feign 的日志級別

Feign有四種日志級別,適應不通的環境:

1、NONE:不記錄任何日志(默認值),性能最佳,適用於生產。

2、HEADERS:記錄BASIC級別的基礎上,記錄請求和響應的header。

3、FULL:記錄請求和響應的header、body和元數據。適用於開發及測試環境定位問題。

4、BASIC:僅記錄請求方法、URL、響應狀態代碼以及執行時間。適用於生產環境追蹤問題。

屬於文件配置:
feign.client.config.服務名(FeignClient的Name屬性).loggerLevel=full

通過代碼配置:
public class FeignConfig {
    @Bean
    public Logger.Level feignLoggerLevel() {
        return Logger.Level.BASIC;
    }
}

 備注:FeignConfig類,建議不要添加@Configuration注解,否則該配置將會被所有Feign Client共享,無法實現細粒度配置。如果一定要加@Configuration注解,就不要讓主應用程序上下文@ComponentScan掃描到。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM