弹性应用的开发利器Hystrix

Request Context Setup

为了能使用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>