springcloud中openfeign止hystrix的几个问题

Posted aofengdaxia

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springcloud中openfeign止hystrix的几个问题相关的知识,希望对你有一定的参考价值。

最近写一个小项目,使用了微服务的架构,当然就少不了openfeign和hystrix。在使用过程中可谓是问题频频,而且遇到问题不好解决。

  1. 新版本的hystrix不起作用
    首先是在使用openfeign的过程中发现fallback不起作用。左思右想,查了各种资料,大多数材料都是说openfeign默认不开启hystrix。需要设置
feign:
  hystrix:
    enabled: true

但是设置后,依然不起作用。最后考虑到的可能是openfeign版本变化的问题,我使用的最新的3.0.3版本,然后退回到2.2.6.RELEASE版本以后,恢复正常。
在这里本地不吐槽一下SpringCloud的向下兼容的问题,更新一个版本就会有一些类库移入或者移出。这样搞,只能是在某个阶段熟悉一个版本的springcloud,然后长期的使用下去,即便是有bug或者严重的缺陷,也很难很轻易的更新到新的版本。一方面是学习成本老高,另外是老项目如何升级。相比之下的.net core就好很多。
2. openfeign的请求中添加token的请求头
这个就相对简单,配置一下openfeign的请求模板就可以了

@Configuration
public class FeignConfig implements RequestInterceptor {

    @Override
    public void apply(RequestTemplate requestTemplate) {
        var token = getToken();
        requestTemplate.header("X-Token",getToken());
    }
    private String getToken(){

        ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        if(servletRequestAttributes != null) {
            HttpServletRequest request = servletRequestAttributes.getRequest();
            if(request != null) {
                return request.getHeader("X-Token");
            }
        }
        return "";
    }

}

但是在实际的使用过程中就发现了第四个问题。没法获得HttpServletRequest
3. RequestContextHolder.getRequestAttributes();为空
网络上普遍的说明是增加一个RequestContextListner的配置

 @Bean
    public RequestContextListener requestContextListener(){
        return new RequestContextListener();
    }

然并卵,增加了也没啥用。
最后再某个角落发现了原来是hystrix开启了后,hystrix的隔离策略的问题。

hystrix:
  command:
    default:
      execution:
        isolation:
          strategy: SEMAPHORE

相对简单的解决了这个问题,然后该方案不是官方很推荐的方案,官方推荐自定义并发策略,需要自己编写一个类,让其继承
HystrixConcurrencyStrategy类,重写wrapCallable方法,出于时间考虑,先把项目跑起来吧,随后尝试其他方法。

参考文章:
https://blog.csdn.net/amosjob/article/details/97400347

以上是关于springcloud中openfeign止hystrix的几个问题的主要内容,如果未能解决你的问题,请参考以下文章

springcloud中openfeign止hystrix的几个问题

springcloud中openfeign止hystrix的几个问题

springcloud中openfeign止hystrix的几个问题

SpringCloud 微服务架构(基础详解)

SpringCloud之OpenFeign

SpringCloud系列——openfeign远程服务调用实战