首页>>后端>>SpringBoot->springcloud中openfeign之hystrix的几个问题

springcloud中openfeign之hystrix的几个问题

时间:2023-11-29 本站 点击:0

最近写一个小项目,使用了微服务的架构,当然就少不了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的请求模板就可以了

@ConfigurationpublicclassFeignConfigimplementsRequestInterceptor{@Overridepublicvoidapply(RequestTemplaterequestTemplate){vartoken=getToken();requestTemplate.header("X-Token",getToken());}privateStringgetToken(){ServletRequestAttributesservletRequestAttributes=(ServletRequestAttributes)RequestContextHolder.getRequestAttributes();if(servletRequestAttributes!=null){HttpServletRequestrequest=servletRequestAttributes.getRequest();if(request!=null){returnrequest.getHeader("X-Token");}}return"";}}

但是在实际的使用过程中就发现了第四个问题。没法获得HttpServletRequest

3. RequestContextHolder.getRequestAttributes();为空 网络上普遍的说明是增加一个RequestContextListner的配置

@BeanpublicRequestContextListenerrequestContextListener(){returnnewRequestContextListener();}

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

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

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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/SpringBoot/355.html