Как продолжить обслуживание запросов в контейнере сервлетов Java, пока балансировщик нагрузки удаляет сервер из пула на основе проверки работоспособности?
Я хочу продолжать обслуживать запросы, пока мой балансировщик нагрузки удаляет сервер из пула на основе проверки работоспособности. Если я знаю, что сервер выключен, я могу изменить проверку работоспособности на нездоровую и дать ей время для удаления, не отбрасывая никаких запросов.
Моя попытка: 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 собирается завершить работу. Все сервлеты и фильтры будут уничтожены до того, как какой-либо ServletContextListeners получит уведомление об уничтожении контекста.
Так что это означает, что он немедленно прекращает обслуживать запросы, если я правильно читаю. Есть ли другой способ добиться того, что я пытаюсь сделать, создать задержку, которая позволит запросам продолжать обслуживаться?