在Tomcat关闭期间保持HTTP请求

woe*_*ann 7 java tomcat servlets shutdown tomcat7

我遇到Tomcat关机问题.在servlet容器关闭时到达的请求似乎被连接器阻止,直到容器关闭完成.

问题是,我们的servlet可能需要一分钟才能关闭,这意味着在此期间到达的连接将保持长达一分钟.

这种行为是正确/预期的吗?

不理想的Tomcat关机行为是

  1. 让现有的请求完成(因为它已经完成),但是
  2. 拒绝新的联系(而不是接受并持有它们)?

Ste*_*n C 5

显然,您不是唯一注意/评论此行为的人; 看到这个"tomcat-user"帖子:

(事实上​​,该帖子与您的问题之间的相似之处表明您和Andry Eng之间存在某种联系......)

很明显,这在某种意义上是"预期的"行为.

它是否"正确"是一个意见问题.如果Tomcat开发人员不同意您的意见,那就没有实际意义了.

并且,对于它的价值,在这里发表关于"理想"行为的修辞问题也没有实际意义.显然,Tomcat开发人员要么不在StackOverflow /"tomcat-users"中闲逛......要么他们不愿意辩论这个问题.


那么你有什么可能的解决方案?

  • 此链接的问答解释了一种解决方法 - 如何在长时间关闭期间处理servlet请求

  • 您可以在Tomcat问题跟踪器上打开一个问题.问题在于,您的问题可能会在发布之前的几个月或几年内出现在列表中.或者它可能被"解雇".

    但是,看起来好像过去没有人提交过这个问题.

  • 您可以弄清楚如何修改Tomcat以在关闭期间拒绝新请求.然后将您的(已测试)更改作为补丁提交.

  • 你可以聘请某人为你做这项工作.例如,请查看此处列出的人员/组织:http://wiki.apache.org/tomcat/SupportAndTraining.


tgk*_*rog 2

这不是可取的行为。关闭时它应该停止接受新连接,但我想在实现它时存在一些技术挑战。无论如何,正如所指出的那样。

我们是如何度过这个难关的:

  1. 我们的 tomcat 前面有网络服务器。我的建议是,将其落实到位,如果没有落实,则制定长期计划。
  2. 有一种方法可以告诉 Web 服务器从其循环实例列表中删除一个节点(tomcat 实例)。
  3. 3-4 分钟后,tomcat 节点应该空闲(没有新连接和旧连接完成)。我们有一个基于http://www.quickserver.org/的自定义 Web 服务器的自定义 Web 服务器,它允许后端 tomcat 完成进程连接,但停止提供新的连接。
  4. 当维护完成后,我们在代理上有另一个服务将 tomcat 添加回活动服务器的 Web 服务器列表。

在我们的例子中,我们有一种方法告诉服务器重新加载它们的配置。其他服务器似乎有相同的https://serverfault.com/questions/108261/how-to-make-modification-take-affect-without-restart-nginx