1

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

但实际上,在我们说它太长而返回并继续我们快乐的方式之前,有什么好的方法支持或推荐用于强制执行 jersey-server 方法可以运行多长时间?

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

更新:

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

4

1 回答 1

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 或其他任何内容来为请求提供时间限制。

于 2013-07-19T17:13:48.213 回答