我想在我的负载均衡器根据运行状况检查从池中删除服务器时继续处理请求。如果我知道服务器正在关闭,我可以将健康检查更改为不健康,并在不丢弃任何请求的情况下将其删除。
我的尝试:contextDestroyed
在ServletContextListener
我正在延迟关闭我的网络应用程序,如下所示ServletContextListener
:
override def contextDestroyed(sce: ServletContextEvent) {
logger.info(s"contextDestroyed, suspend for $ShutdownDelayMS ms")
Thread.sleep(ShutdownDelayMS)
logger.info("Suspend finished, shutting down")
}
我看到了日志和两者之间的延迟,但是一旦contextDestroyed
被调用,服务器将不再提供请求,并且在 stdout 中我立即看到:
[INFO] Stopped ServerConnector@19877453{HTTP/1.1}{0.0.0.0:8080}
我是否误解了contextDestroyed
应该如何工作?码头 9.2.9.v20150224,javax.servlet 3.0.1。
文档contextDestroyed
说:
接收到 ServletContext 即将关闭的通知。在通知任何 ServletContextListener 上下文销毁之前,所有 servlet 和过滤器都将被销毁。
所以这意味着如果我正确阅读它,它会立即停止服务请求。有没有另一种方法来实现我想要做的事情,创造一个允许继续服务请求的延迟?