OpenFeign使用教程


1、什么是Feign

Feign是Netflix開發的聲明式、模板化的HTTP客戶端, Feign可以幫助我們更快捷、優雅地調用HTTP API。

在Spring Cloud中,使用Feign非常簡單——創建一個接口,並在接口上添加一些注解,代碼就完成了。Feign支持多種注解,例如Feign自帶的注解或者JAX-RS注解等。

Spring Cloud對Feign進行了增強,使Feign支持了Spring MVC注解,並整合了Ribbon和Eureka,從而讓Feign的使用更加方便。

Spring Cloud Feign是基於Netflix feign實現,整合了Spring Cloud Ribbon和Spring Cloud Hystrix,除了提供這兩者的強大功能外,還提供了一種聲明式的Web服務客戶端定義的方式。

Spring Cloud Feign幫助我們定義和實現依賴服務接口的定義。在Spring Cloud feign的實現下,只需要創建一個接口並用注解方式配置它,即可完成服務提供方的接口綁定,簡化了在使用Spring Cloud Ribbon時自行封裝服務調用客戶端的開發量。

Spring Cloud Feign具備可插拔的注解支持,支持Feign注解、JAX-RS注解和Spring MVC的注解。

2、快速使用

2.1、pom.xml文件中引入以來

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>

2.2、編寫Feign調用接口

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;

import com.cnblogs.javalouvre.api.hystrix.StockApiHystrix;

@FeignClient(name = "stock-service", fallback = StockApiHystrix.class)
public interface StockApi {

    @PutMapping(path = "/stock/reduce/{id}/{num}")
    String reduce(@PathVariable(name = "id") Long id, @PathVariable(name = "num") Integer num);

}

注意:這里返回參數、請求參數務必與Controller中相關方法保持一致,@PathVariable必須指定參數

3、配置

3.1、日志配置

3.1.1、全局日志配置,對當前微服務下所有Feign接口都起效果

3.1.1.1、application.yml文件中設置日志級別
logging:
  level:
    com.cnblogs.javalouvre.api: debug
3.1.1.2、編寫配置類
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FeignConfig {

    @Bean
    public feign.Logger.Level getFeignLoggerLevel() {
        return feign.Logger.Level.FULL;
    }

}

3.1.2、局部日志配置,對當前微服務下所指定Feign接口都起效果

3.1.2.1、application.yml文件中設置日志級別
logging:
  level:
    com.cnblogs.javalouvre.api: debug
3.1.2.2、application.yml配置feign日志級別,需要指定針對服務名稱
feign:
  client:
    config:
      stock-service:
        loggerLevel: FULL

3.2、超時時間設置

設置超市時間有兩種方式

3.2.1、方式一:配置類

import static java.util.concurrent.TimeUnit.MILLISECONDS;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FeignConfig {

    @Bean
    public feign.Request.Options getFeignRequestOptions() {
        return new feign.Request.Options(5000, MILLISECONDS, 3000, MILLISECONDS, true);
    }
}

3.2.1、方式二:配置文件

application.yml文件中,設置連接超時時間、讀取超時時間

feign:
  client:
    config:
      stock-service:
        connectTimeout: 5000
        readTimeout: 3000


免責聲明!

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



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