• 客户端负载均衡Feign之四:Feign配置


    Ribbon配置

    在Feign中配置Ribbon非常简单,直接在application.properties中配置即可,如:

    # 设置连接超时时间
    ribbon.ConnectTimeout=500
    # 设置读取超时时间
    ribbon.ReadTimeout=5000
    # 对所有操作请求都进行重试
    ribbon.OkToRetryOnAllOperations=true
    # 切换实例的重试次数
    ribbon.MaxAutoRetriesNextServer=2
    # 对当前实例的重试次数
    ribbon.MaxAutoRetries=1

    同样也可以指定服务配置,直接在application.properties中采用.ribbon.key=value的格式进行配置,如下:

    # 设置针对user-service服务的连接超时时间
    user-service.ribbon.ConnectTimeout=600
    # 设置针对user-service服务的读取超时时间
    user-service.ribbon.ReadTimeout=6000
    # 设置针对user-service服务所有操作请求都进行重试
    user-service.ribbon.OkToRetryOnAllOperations=true
    # 设置针对user-service服务切换实例的重试次数
    user-service.ribbon.MaxAutoRetriesNextServer=2
    # 设置针对user-service服务的当前实例的重试次数
    user-service.ribbon.MaxAutoRetries=1

    在SpringCloudFeign中是默认打开重试机制,从上面的配置信息也可以看出,我们可以设置重试的次数。对于重试机制的测试,可以让服务提供方的方法延迟随机毫秒数来测试。

    Hystrix配置

    对于Hystrix的配置同样可以在application.properties中配置,全局配置直接使用默认前缀hystrix.command.default,如

    # 设置熔断超时时间
    hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=10000
    # 关闭Hystrix功能(不要和上面的配置一起使用)
    feign.hystrix.enabled=false
    # 关闭熔断功能
    hystrix.command.default.execution.timeout.enabled=false

    也可以直接对指定的接口进行配置,采用hystrix.command.default.<commandKey>作为前缀,比如如/findAllUser

    # 设置熔断超时时间
    hystrix.command.findAllUser.execution.isolation.thread.timeoutInMilliseconds=10000
    # 关闭熔断功能
    hystrix.command.findAllUser.execution.timeout.enabled=false

    对于重复的接口名会共用这一条Hystrix配置;

    禁用Hystrix

    上面的配置信息中,可以通过配置文件全局禁用Hystrix也可以指定接口禁用。我们也可以注解属性的方式禁用Hystrix; 
    - 构建一个关闭Hystrix的配置类

    @Configuration
    public class DisableHystrixConfiguration {
    
        @Bean
        @Scope("prototype")
        public Feign.Builder feignBuilder(){
            return Feign.builder();
        }
    }
    • @FeignClient注解中,通过configuration参数引入上面实现的配置
    @FeignClient(value = "USER-SERVICE",configuration = DisableHystrixConfiguration.class)
    public interface UserRafactorService extends UserService {
    }

    服务降级配置

    在Hystrix中我们可以直接通过@HystrixCommand注解的fallback参数进行配置降级处理方法,然而Feign对其进行封装,并提供了一种简单的定义方式: 
    1. 在之前的feign-consumer服务中创建一个UserServiceFallback类,该类实现UserService接口。这里对于哪个类接口的降级就实现哪个接口,

    @Component
    public class UserServiceFallback implements UserService {
        @Override
        public List<User> findAll() {
            return null;
        }
    
        @Override
        public User finUserById(Long id) {
            return new User(-1L,"error",0);
        }
    
        @Override
        public User findUserHeader(String name, Long id, Integer age) {
            return new User(-1L,"error",0);
        }
    
        @Override
        public User insertUser(User user) {
            return new User(-1L,"error",0);
        }
    }
    1. 然后再@FeignClient注解中指定服务降级处理类即可:
    @FeignClient(value = "USER-SERVICE",fallback = UserServiceFallback.class)
    1. 在配置文件中开启Hystrix:
    feign:
      hystrix:
        enabled: true

    然后在USER-SERVICE服务中将某个接口设置延迟测试: 

    请求压缩

    Spring Cloud Feign支持对请求和响应进行GZIP压缩,以提高通信效率,配置方式如下:

    # 配置请求GZIP压缩
    feign.compression.request.enabled=true
    # 配置响应GZIP压缩
    feign.compression.response.enabled=true
    # 配置压缩支持的MIME TYPE
    feign.compression.request.mime-types=text/xml,application/xml,application/json
    # 配置压缩数据大小的下限
    feign.compression.request.min-request-size=2048

    日志配置

    SpringCloudFeign为每一个FeignClient都提供了一个feign.Logger实例。可以根据logging.level.<FeignClient>参数配置格式来开启Feign客户端的DEBUG日志,其中<FeignClient>为Feign客户端定义接口的完整路径。如:

    logging:
      level: 
        com.wqh.feign.service.UserService: debug

    然后再主类中直接加入Looger.Level的Bean

    @Bean
    public Logger.Level feignLoggerLevel(){
        return  Logger.Level.FULL;
    }

    这里也可以通过配置,然后在具体的Feign客户端来指定配置类实现日志。 
    日志级别有下面4类: 
    - NONE:不记录任何信息; 
    - BASIC:仅记录请求方法、URL以及响应状态码和执行时间; 
    - HEADERS:除了记录BASIC级别的信息外,还记录请求和响应的头信息; 
    - FULL:记录所有请求与响应的明细,包括头信息、请求体、元数据等。

  • 相关阅读:
    badboy安装及使用(网页录制可用于jmeter)
    allure使用MASTER_HELPER报错cannot find reference MASTER_HELPER in allure.py
    Python之Django--ORM连表操作
    Python之前端
    Python之线程池
    Python之Web框架们
    Python之Django【进阶篇 】
    Python之Django【基础篇】
    Python框架之Tornado(四)源码之褪去模板外衣
    Python框架之Tornado(四)源码之褪去模板外衣的前戏
  • 原文地址:https://www.cnblogs.com/duanxz/p/7519826.html
Copyright © 2020-2023  润新知