spring_cloud组件之Feign

一、简介

  Feign也叫做伪装,可以把rest的请求隐藏,不需要进行拼接url、参数等。组件主页:https://github.com/OpenFeign/feign

二、应用

  1、pom.xml  

1 <dependency>
2     <groupId>org.springframework.cloud</groupId>
3     <artifactId>spring-cloud-starter-openfeign</artifactId>
4 </dependency>

  2、启动类添加注解 @EnableFeignClients 开启 feign 功能,编辑feign客户端代码,客户端可以使用spring mvc 注解,demo代码如下:

 1 package com.liuxn.cloud.common.client;
 2 
 3 import com.liuxn.cloud.framework.model.DemoVo;
 4 import org.springframework.cloud.openfeign.FeignClient;
 5 import org.springframework.web.bind.annotation.GetMapping;
 6 import org.springframework.web.bind.annotation.PathVariable;
 7 
 8 /**
 9  * @author liuxn
10  * @date 2020/12/25
11  */
12 //声明当前客户端是provider服务、作用是拼接请求uurl 使用feign代替RestTemplate
13 @FeignClient("springcloud-eureka-provider")
14 public interface DemoClient {
15 
16     /** 拼接后url http://springcloud-eureka-provider/provider/2
17      * 可以使用spring mvc 注解
18      * @param id
19      * @return
20      */
21 
22     @GetMapping("/provider/{id}")
23     DemoVo getUserById(@PathVariable int id);
24 }

三、feign 负载均衡及熔断

  feign可开启的配置 负载均衡、服务熔断、请求压缩、日志级别等,

  • Rribbon

  feign中默认设置请求超时时间 默认1秒,单位:ms。可通过一下配置进行修改  

 1 ribbon:
 2   # 连接超时时长
 3   ConnectTimeout: 1000
 4   #数据通信超时时长
 5   ReadTimeout: 2000
 6   #当前服务器的重试次数
 7   MaxAutoRetries: 0
 8   #重试多少次服务
 9   MaxAutoRetriesNextServer: 0
10   #是否对所有的请求方式都重试
11   okToRetryonA17operations: false
  • Hystrix 

  1、开启Hystrix 配置  

1 feign:
2   hystrix:
3     enabled: true #开启feign中 Hystrix熔断

  2、编写服务降级类   

 1 /**
 2  * 默认降级类  实现指定的client
 3  * @author liuxn
 4  * @date 2020/12/29
 5  */
 6 @Component
 7 public class DemoClientFallBack implements DemoClient {
 8     @Override
 9     public DemoVo getUserById(int id) {
10 
11         DemoVo demoVo = new DemoVo();
12         demoVo.setMessage("失败、请求被降级了 "+id);
13         return demoVo;
14     }
15 }
 1 @FeignClient(value = "springcloud-eureka-provider",fallback = DemoClientFallBack.class)
 2 public interface DemoClient {
 3 
 4     /** 拼接后url http://springcloud-eureka-provider/provider/2
 5      * 可以使用spring mvc 注解
 6      * @param id id
 7      *
 8      * @return DemoVo
 9      */
10     @GetMapping("/provider/{id}")
11     DemoVo getUserById(@PathVariable int id);
12 }

   当前服务内出错时返回 {"message":"失败、请求被降级了 123"}

  • 请求压缩 :支持对请求进行gzip压缩 减少通信过程中的性能损耗  
1 feign:
2   compression:
3     request:
4       enabled: true #开启请求压缩
5       mime-types: text/xml, application/xml, application/json #支持压缩数据类型
6       min-request-size: 2048 #触发压缩大小
7     response:
8       enabled: true

  日志级别   

  logging.level.xx=debug 词配置不会对feign生效。需要重新创建一个新的feign.logger示例。feign 支持 logger 级别有:

  • NONE: 不记录任何日志信息,默认值
  • BASIC:仅记录请求的方法,URL以及响应状态码和执行时间
  • HEADERS:在BASIC的基础上记录请求响应的头信息
  • FULL:记录所有请求和响应的明细。包括头信息,请求体,元数据。

 feign日志级别配置类:  

 1 @Configuration
 2 public class FeignConfig {
 3 
 4 
 5     /**
 6      * NONE: 不记录任何日志信息,默认值
 7      * BASIC:仅记录请求的方法,URL以及响应状态码和执行时间
 8      * HEADERS:在BASIC的基础上记录请求响应的头信息
 9      * FULL:记录所有请求和响应的明细。包括头信息,请求体,元数据
10      */
11     @Bean
12     Logger.Level feignLoggerLevel() {
13         return Logger.Level.FULL;
14     }
15 
16 }

开启feign日志  configuration = FeignConfig.class 

/**
 * @author liuxn
 * @date 2020/12/25 声明当前客户端是provider服务、作用是拼接请求uurl
 */
@FeignClient(value = "springcloud-eureka-provider", fallback = DemoClientFallBack.class,
        configuration = FeignConfig.class)
public interface DemoClient {

    /**
     * 拼接后url http://springcloud-eureka-provider/provider/2 可以使用spring mvc 注解
     *
     * @param id id
     *
     * @return DemoVo
     */
    @GetMapping("/provider/{id}")
    DemoVo getUserById(@PathVariable int id);
}

      

原文地址:https://www.cnblogs.com/lxn0216/p/14189429.html