• 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

  • 相关阅读:
    解决MAMP启动mysql服务 但是Navicat连接不上
    iOS 更改状态栏颜色和隐藏状态栏
    Xcode 常用代码段
    iOS开发小技巧
    怎么让self.view的Y从navigationBar下面开始计算
    iOS强制横屏或强制竖屏
    判断当前viewcontroller是push还是present的方式显示的
    Git命令速查表
    全栈程序员的新玩具Rust(一) IDE环境
    火狐的野望
  • 原文地址:https://www.cnblogs.com/duanxz/p/14605515.html
Copyright © 2020-2023  润新知