目錄
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
