日期:2014-05-20  浏览次数:20688 次

Tomcat重新加载一个webapp时, 怎么处理内存中的请求以保证数据一致?
现在在研究Tomcat的不停机情况下的服务升级问题。 可以让Tomcat重新加载一个webapp来达到不停机的情况下的服务升级, 不过关于这样升级的影响还是有些疑问。 

  具体有下面几个: 

  1, 关于请求的接受。 重新加载webapp时, 如果来了针对这个webapp的新请求时, 怎么办?Tomcat是把这个请求先缓存起来?还是直接就以404的形式返回? 
  2, 关于正在处理的请求。 Tomcat是否会在重新加载前,把内存中的请求处理完,以保存请求不会丢失,也保证了数据的一致性? 
  3, 关于Session信息的保存与恢复。 这一块Tomcat是怎么保证的? 毕竟session中有很多关键信息的。 

  另外, 关于Tomcat方面的文档很少, 请问有没有这方面的文档?

------解决方案--------------------
1.请求会等待,等待超时后会显示404或者直接显示访问的页面不存在,这个好像跟你webapp加载进度有关。

2.正在处理的请求会直接显示异常或失败

3.session信息会丢失。

其实你这种情况做个集群最合适,先更新一个tomcat的,然后再更新另外一个。


------解决方案--------------------
关于session的保存,你可以参考官方的文档,其中主要就是
Java code
org.apache.catalina.session.StandardManager  
org.apache.catalina.session.PersistentManager