zoukankan      html  css  js  c++  java
  • Hystrix Feign 特定状态码不熔断

    背景

    部分业务校验规范或疏忽场景,传入bad request 导致接口熔断,影响接口正常流量

    处理

    重写Feign error decoder逻辑

    import com.netflix.hystrix.exception.HystrixBadRequestException;
    import feign.Response;
    import feign.Util;
    import feign.codec.ErrorDecoder;
    
    import static java.lang.String.format;
    
    /**
     * @author yugj
     * @date 2020/4/29 9:13 上午.
     */
    public class SkipHttpStatusErrorDecoder extends ErrorDecoder.Default {
    
        public SkipHttpStatusErrorDecoder() {
            super();
        }
    
        @Override
        public Exception decode(String methodKey, Response response) {
    
            int status = response.status();
            if (status == 400 || status == 404) {
                String message = statusFormat(methodKey, response);
                return new HystrixBadRequestException(message);
            }
    
            return super.decode(methodKey, response);
        }
    
        private String statusFormat(String methodKey, Response response) {
    
            String message = format("status %s reading %s", response.status(), methodKey);
            if (response.body() != null) {
                try {
                    String body = Util.toString(response.body().asReader());
                    message += "; content:
    " + body;
                } catch (Exception e) {
                    //do nothing
                }
            }
    
            return message;
        }
    }
    
    @Configuration
    public class SkipHttpStatusConfiguration {
        @Bean
        public SkipHttpStatusErrorDecoder errorDecoder() {
            return new SkipHttpStatusErrorDecoder();
        }
    
    

    原理

    com.netflix.hystrix.AbstractCommand#executeCommandAndObserve异常控制HystrixBadRequestException没有走到熔断逻辑

    转:https://my.oschina.net/yugj/blog/4257960

  • 相关阅读:
    php里面的变量的使用
    thinkphp框架的大D方法应用
    微信号的openid的深入理解
    thinkphp中的常见静态常亮
    微信qq,新浪等第三方授权登录的理解
    linux的脚本应用for循环答应变量
    linux的slect的脚本适用于交互
    linux下面的打包压缩命令
    linux下面的智能解压脚本smart解压
    Enum 枚举小结 java **** 最爱那水货
  • 原文地址:https://www.cnblogs.com/duanxz/p/14605515.html
Copyright © 2011-2022 走看看