通过Jersey服务器中的超时强制实施Java方法的QoS度量标准

时间:2013-07-19 15:35:14

标签: java jersey

在完美的世界中,我会想象有一个像@QoS(10, CONSTANT_RETURN_OBJECT)这样的注释可以放在java方法周围,如果它们需要的时间比指定时间(本例中为10秒)要长,那么方法执行基本上被认为是超时的,我们返回由开发人员定义的预先打包的CONSTANT_RETURN_OBJECT,以指示空结果。

但实际上,在我们说它太长并且只是回归并继续我们的快乐方式之前,支持或建议实施泽西服务器方法可以运行多长时间的好方法是什么?

它的一个给定(我的问题在这里),你无法控制调用jersey-server的客户端,所以你不能在那里设置超时...这就是为什么你要强制执行一些合理的服务器端。

UPDATE:

我想我在某种程度上要求的是,是否有一个注释基本上将方法调用包装为Executor驱动的任务并以超​​时运行它?有点像这两个帖子的答案中写的代码:

1 个答案:

答案 0 :(得分:1)

执行此操作的方法是实现servlet过滤器。基本过滤器如下所示:

public class TimeoutFilter implements Filter {

  @Override
  public void doFilter(final ServletRequest servletRequest,
                       final ServletResponse servletResponse,
                       final FilterChain chain) throws IOException, ServletException {
    final HttpServletRequest req = (HttpServletRequest)servletRequest;

    try {
      // Execute this with a time limit
      chain.doFilter(servletRequest, servletResponse);
    }
    catch (Exception e) {
      // Handle exceptions here; you should state the exceptions explicitly
      // rather than just catching Exception
    }
  }
}

然后,您可以设置Executor或过滤器中的任何内容,为请求提供时间限制。