概述
使用Hystrix缓存时报没初始化HystrixRequestContext的错误:
java.lang.IllegalStateException: Request caching is not available. Maybe you need to initialize the HystrixRequestContext?
at com.netflix.hystrix.HystrixRequestCache.get(HystrixRequestCache.java:104)
at com.netflix.hystrix.AbstractCommand$7.call(AbstractCommand.java:478)
at com.netflix.hystrix.AbstractCommand$7.call(AbstractCommand.java:454)
at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46)
at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
解决方法:
1.在每个用到请求缓存的Controller方法里加上如下代码:
//初始化Hystrix请求上下文
HystrixRequestContext context = HystrixRequestContext.initializeContext();
//省略中间代码上下文环境用完需要关闭
context.close();
2.使用Filter全局过滤
@WebFilter(filterName = "hystrixRequestContextServletFilter",urlPatterns = "/*",asyncSupported = true)
public class HystrixRequestContextServletFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//初始化Hystrix请求上下文
HystrixRequestContext context = HystrixRequestContext.initializeContext();
try {
//请求正常通过
filterChain.doFilter(servletRequest, servletResponse);
} finally {
//关闭Hystrix请求上下文
context.shutdown();
}
}
@Override
public void destroy() {
}
}
并在启动类上加上@ServletComponentScan注解。
最后
以上就是动听金针菇为你收集整理的使用Hystrix缓存时报没初始化HystrixRequestContext的错误的全部内容,希望文章能够帮你解决使用Hystrix缓存时报没初始化HystrixRequestContext的错误所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复