嵌入Jetty,在给定时间后杀死请求

时间:2016-04-15 09:04:33

标签: java jetty embedded-jetty

我运行一个带有嵌入式Jetty的jar。有时会发生一个请求卡在某个无限循环中。显然,修复无限循环将是最佳选择。但是,目前这是不可能的。

所以我正在寻找一个选项,用于检查请求是否存在超过例如5分钟,并杀死相应的线程。

我尝试了典型的Jetty选项:

  • maxIdleTime
  • soLingerTime
  • stopTimeout

他们都没有按预期工作。还有其他选择吗?

1 个答案:

答案 0 :(得分:1)

您是否可以访问代码的代码,这些代码需要很长时间才能完成?如果是这样,你可以使用callable和Executor自己实现这个,下面是一个带有例子的单元测试:

@Test
public void timerTest() throws Exception
{
  //create an executor
  ExecutorService executor = Executors.newFixedThreadPool(10);

  //some code to run
  Callable callable = () -> {
    Thread.sleep(10000); //sleep for 10 seconds
    return 123;
  };

  //run the callable code
  Future<Integer> future = (Future<Integer>) executor.submit(callable);

  Integer value = future.get(5000, TimeUnit.MILLISECONDS); //this will timeout after 5 seconds

  //kill the thread
  future.cancel(true);

}