Feign实现服务调用

一.什么是Feign

Feign是Spring Cloud提供的一个声明式的伪Http客户端, 它使得调用远程服务就像调用本地服务一样简单, 只需要创建一个接口并添加一个注解即可。
Feign默认集成了 Ribbon, 所以在Nacos下使用Fegin默认就实现了负载均衡的效果。

二.Feign的使用

1.加入依赖


<dependency>
	<groupId>org.springframework.cloudgroupId>
	<artifactId>spring-cloud-starter-openfeignartifactId>
dependency>

2.在主类上添加Fegin的注解

@EnableFeignClients

@SpringBootApplication
@EnableDiscoveryClient
//开启Fegin
@EnableFeignClients
public class Application {}

3.创建一个service, 并使用Fegin实现微服务调用

//声明调用的提供者的name(service-product)
@FeignClient("service-product")
public interface ProductService {
	//指定调用提供者的哪个方法
	//@FeignClient+@GetMapping 就是一个完整的请求路径 http://service-product/product/{pid}
	@GetMapping(value = "/product/{pid}")
	Product findByPid(@PathVariable("pid") Integer pid);
}

4.注入使用


// 和正常的service一样注入使用
@Autowired
private ProductService productService;

//通过fegin调用商品微服务
Product product = productService.findByPid(pid);

三.服务调用Feign高级

1.配置

feign:
  client:
    config:
      feignName: #定义FeginClient的名称 
        connectTimeout: 5000 # 相当于Request.Options
        readTimeout: 5000 # 相当于Request.Options
        # 配置Feign的日志级别,相当于代码配置方式中的Logger
        loggerLevel: full
        # Feign的错误解码器,相当于代码配置方式中的ErrorDecoder
        errorDecoder: com.example.SimpleErrorDecoder
        # 配置重试,相当于代码配置方式中的Retryer
        retryer: com.example.SimpleRetryer
        # 配置拦截器,相当于代码配置方式中的RequestInterceptor
        requestInterceptors:
          - com.example.FooRequestInterceptor
          - com.example.BarRequestInterceptor
        decode404: false
  • feignName:FeginClient的名称 (服务名称例如:service-product) 将调用的微服务名称改成default就配置成全局的了
  • connectTimeout : 建立链接的超时时长
  • readTimeout : 读取超时时长
  • readTimeout : 读取超时时长
  • loggerLevel: Fegin的日志级别
  • errorDecoder :Feign的错误解码器
  • retryer : 配置重试
  • requestInterceptors : 添加请求拦截器
  • decode404 : 配置熔断不处理404异常

2.请求压缩

Spring Cloud Feign 支持对请求和响应进行GZIP压缩,以减少通信过程中的性能损耗。通过下面的参数即可开启请求与响应的压缩功能:

feign:
  compression:
    request:
      enabled: true # 开启请求压缩
    response:
      enabled: true # 开启响应压缩

同时,我们也可以对请求的数据类型,以及触发压缩的大小下限进行设置:

feign:
  compression:
    request:
      enabled: true # 开启请求压缩
      mime-types: text/html,application/xml,application/json # 设置压缩的数据类型
      min-request-size: 2048 # 设置触发压缩的大小下限

注:上面的数据类型、压缩大小下限均为默认值。

3.日志级别

在开发或者运行阶段往往希望看到Feign请求过程的日志记录,默认情况下Feign的日志是没有开启的。
要想用属性配置方式来达到日志效果,只需在 application.yml 中添加如下内容即可:

feign:
  client:
    config:
      shop-service-product:
        loggerLevel: FULL

logging:
  level:
    cn.itcast.order.fegin.ProductFeginClient: debug
  • logging.level.xx : debug : Feign日志只会对日志级别为debug的做出响应
  • feign.client.config.shop-service-product.loggerLevel : 配置Feign的日志Feign有四种
    日志级别:
    1. NONE【性能最佳,适用于生产】:不记录任何日志(默认值)
    2. BASIC【适用于生产环境追踪问题】:仅记录请求方法、URL、响应状态代码以及执行时间
    3. HEADERS:记录BASIC级别的基础上,记录请求和响应的header。
    4. FULL【比较适用于开发及测试环境定位问题】:记录请求和响应的header、body和元数据。

Feign实现服务调用_第1张图片

你可能感兴趣的:(SpringCloud,java,spring,cloud,微服务,Feign)