如何在嵌入式Jetty中优雅地取消死锁的WEB请求

时间:2016-06-15 11:31:07

标签: java embedded-jetty jetty-8

我使用嵌入式Jetty来托管WEB服务器。请求被转发(通过我的内部实现)到动态加载的JAR的代码。在某些时候,我需要热更新内存中的JAR,为此我等待请求完成,但可能由于编程错误或实际长时间运行等待超出合理时间而发生。

我想在暂停一段时间后取消处理WEB请求 Jetty(v.8 +)在这种情况下我能做些什么?

PS:我知道Thread.stop()在线程上遇到了WEB请求,这似乎不是一个好方法。

2 个答案:

答案 0 :(得分:1)

如果在一段时间后没有完成请求线程,您可以编写一个使用HandlerWrapper来中断请求线程的Jetty ScheduledExecutorService。请看这里的例子:

https://github.com/outbrain/ob1k/blob/master/ob1k-jetty/src/main/java/com/outbrain/ob1k/server/jetty/handler/RequestTimeoutHandler.java

答案 1 :(得分:0)

唯一有效的请求取消是终止连接和/或端点。

这通常(并且很容易)通过空闲超时完成。

要进行jar的热插拔,关闭(或停止)连接器,等待所有请求/连接到空闲超时,交换你的jar,然后重新启动连接器。