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

  • 相关阅读:
    config 文件夹中的 dev.env.js
    config 文件夹中的 index.js
    Dialog 对话框 可拖拽
    Pagination 分页 封装
    ElasticSearch学习03--使用Java连接ES
    ElasticSearch学习02--使用Kibana管理ES
    ElasticSearch学习01--基本结构与操作
    redis学习02--使用Jedis调用Redis
    redis学习01--常用命令
    Java基础学习08--JDK1.8特性
  • 原文地址:https://www.cnblogs.com/duanxz/p/14605515.html
Copyright © 2011-2022 走看看