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

标签 java embedded-jetty jetty-8

我使用嵌入式 Jetty 来托管 WEB 服务器。请求(通过我的内部实现)转发到动态加载的 JAR 中的代码。有时我需要热更新内存中的 JAR,为此我会等待请求完成,但可能会发生这种情况,要么是因为编程错误,要么是因为实际长时间运行的操作等待超出了合理的时间。

我想在超时后取消对 WEB 请求的处理。
在这种情况下我可以使用 Jetty (v.8+) 做什么?

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

最佳答案

您可以编写一个 Jetty HandlerWrapper,它使用 ScheduledExecutorService 来中断请求线程(如果请求线程在一段时间后尚未完成)。请参阅此处的示例:

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

关于java - 如何优雅地取消嵌入式 Jetty 中死锁的 WEB 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37834213/

相关文章:

java - 使用 Jetty 8 时无法访问 Neo4j Web 界面

java - 从 Wordpress POST 到 Java

java - 从 jdk1.7.0_25 迁移到 jdk1.7.0_40 时的性能回归

java - Jetty:找出哪个连接器用于传入请求

java - 将嵌入式 Jetty 服务器作为后台进程启动

deployment - jetty 部署顺序

maven - 运行 mvn org.mortbay.jetty :jetty-maven-plugin:run 时出现 "Too many open files"异常

java - Camel 中 LoggingErrorHandler 的意外行为

java - 将参数从 DialogFragment 传递到 Fragment

gradle - 离线Gretty插件