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