为了能使用request的scoped特性(请求缓存,请求折叠,请求日记)HystrixRequestContext 的生命周期必须被管理起来。(或者一个替代的HystrixConcurrencyStrategy 实现)
这就意味着下面代码必须在一个请求之前执行
HystrixRequestContext context = HystrixRequestContext.initializeContext();
然后在请求的最后调用
context.shutdown();
在一个标准的java应用中,一个Servlet过滤器通过实现类似于下面的过滤器被用于初始化这个生命周期
public class HystrixRequestContextServletFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HystrixRequestContext context = HystrixRequestContext.initializeContext();
try {
chain.doFilter(request, response);
} finally {
context.shutdown();
}
}
}
过滤器被用于所有的请求,在web。xml中的配置如下
<filter>
<display-name>HystrixRequestContextServletFilter</display-name>
<filter-name>HystrixRequestContextServletFilter</filter-name>
<filter-class>com.netflix.hystrix.contrib.requestservlet.HystrixRequestContextServletFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HystrixRequestContextServletFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>