我遇到Tomcat关机问题。请求到达时的请求 关闭servlet容器似乎被连接器阻止 直到集装箱关闭完毕。
问题是,我们的servlet可能需要一分钟才能关闭,这意味着 在此期间抵达的连接将保留最多一分钟。
此行为是否正确/预期?
理想的Tomcat关闭行为不是
答案 0 :(得分:5)
显然,您不是唯一注意/评论此行为的人;看到这个“tomcat-user”帖子:
(事实上,该帖子和您的问题之间的相似之处表明您和Andry Eng之间存在某种联系......)
很明显,从某种意义上说,这是“预期的”行为。
是否“正确”是一个意见问题。如果Tomcat开发人员不同意你的看法,那就没有实际意义了。
而且,对于它的价值,在这里发表关于“理想”行为的修辞问题也没有实际意义。显然,Tomcat开发人员要么不在StackOverflow /“tomcat-users”中闲逛......要么他们不愿意讨论这个问题。
那么你有什么可能的解决方案?
此关联的问答解释了一种解决方法 - How to process servlet requests during long shutdown
您可以在Tomcat问题跟踪器上打开一个问题。问题在于,您的问题可能会在发布之前的几个月或几年内出现在列表中。或者它可能被“解雇”。
但是,过去似乎没有人提交过这个问题。
您可以弄清楚如何修改Tomcat以在关机期间拒绝新请求。然后将您的(已测试)更改作为补丁提交。
你可以聘请某人为你做这项工作。例如,请查看此处列出的人员/组织:http://wiki.apache.org/tomcat/SupportAndTraining。
答案 1 :(得分:2)
这是正确的行为。只要服务器在给定端口处启动,客户端就会发送请求。
只要启动,服务器就会接受请求。因此,将收到在关机过程中收到的一些请求,但不会完全处理。如果要优雅地处理这些请求,则需要实现自己的机制。您可以使用JMS队列或过滤器。第一个请求接收过滤器将首先存储(db / serialize)请求然后处理它。稍后当服务器重新启动时,您可以检查未处理的请求,您可以处理它们或通知客户端它失败了。
答案 2 :(得分:1)
这不是理想的行为。当关闭它应该停止接受新的连接,但我想在实现它时存在一些技术挑战。不管怎么说,Moot,如上所述。
我们如何克服它:
在我们的案例中,我们有办法告诉服务器重新加载他们的配置。其他服务器似乎具有相同的https://serverfault.com/questions/108261/how-to-make-modification-take-affect-without-restart-nginx