您当前的位置: 首页 >  Java

一一哥Sun

暂无认证

  • 2浏览

    0关注

    622博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

java.lang.IllegalStateException: Request caching is not available. Maybe you need to initialize the

一一哥Sun 发布时间:2021-05-11 17:40:00 ,浏览量:2

java.lang.IllegalStateException: Request caching is not available. Maybe you need to initialize the HystrixRequestContext解决 一.异常现象

我在利用Hystrix组件进行微服务开发,实现服务降级时,遇到了如下异常信息:

java.lang.IllegalStateException: Request caching is not available. Maybe you need to initialize the HystrixRequestContext?
     at com.netflix.hystrix.HystrixRequestCache.get(HystrixRequestCache.java:104) ~[hystrix-core-1.5.18.jar:1.5.18]
     at com.netflix.hystrix.AbstractCommand$7.call(AbstractCommand.java:478) ~[hystrix-core-1.5.18.jar:1.5.18]
     at com.netflix.hystrix.AbstractCommand$7.call(AbstractCommand.java:454) ~[hystrix-core-1.5.18.jar:1.5.18]
     at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46) ~[rxjava-1.3.8.jar:1.3.8]
     .....
二.异常原因

根据异常信息可以看到,产生该异常是因为我们没有初始化HystrixRequestContext对象,所以对应的解决办法就是初始化该对象就好了。

三.解决办法

我们可以编写一个过滤器,在过滤器中,在有请求发来时,初始化一个HystrixRequestContext对象。过滤器代码如下:

@WebFilter("/*")
 public class CacheFilter implements Filter {
 ​
     @Override
     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
         //解决Hystrix的缓存功能不生效的问题
         HystrixRequestContext.initializeContext();
         chain.doFilter(request, response);
     }
 ​
 }

另外要注意,在SpringBoot项目中,要利用ServletComponentScan注解,添加对该过滤器的扫描配置。

例如:

@ServletComponentScan(basePackages = {com.yyg.customer.filter"})

 

关注
打赏
1665624836
查看更多评论
立即登录/注册

微信扫码登录

0.0396s