zoukankan      html  css  js  c++  java
  • 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);
    }

          

  • 相关阅读:
    centos7搭建kvm
    python脚本与shell脚本的结合应用
    shell脚本常用命令组合
    服务器硬盘损坏恢复过程
    linux grup引导进入单用户下
    mysql 数据库设计查询规范
    mysql 8.0 远程连接问题
    linux新加硬盘的操作
    linux 添加硬盘到/home 目录
    linux设置最大连接数
  • 原文地址:https://www.cnblogs.com/lxn0216/p/14189429.html
Copyright © 2011-2022 走看看