2014-12-29 40 views
2

並行部署關於平行的部署中,Tomcat 7 configuration reference說:會議並在Tomcat中7

您可以部署在相同的時間相同的上下文路徑的web應用程序的多個版本。用於將請求與上下文版本匹配的規則如下:

  • 如果請求中沒有會話信息,請使用最新版本。
  • 如果會話信息出現在請求中,請檢查每個版本的會話管理器是否有匹配的會話,如果找到,請使用該版本。
  • 如果請求中存在會話信息,但找不到匹配的會話,請使用最新版本。

我的問題是幾倍:

  1. 究竟是什麼意思,「如果沒有會話信息是在請求」?這是否只是在請求中尋找一個jsessionid cookie(或者在URL中或配置的任何地方)?
  2. 我應該在哪個單元中查找請求與上下文匹配的位置?我一直在仔細研究Tomcat 7.0源代碼,但是我無法看到發生了什麼。
  3. 有沒有辦法向Tomcat說謊會議信息存在?通過將請求的requestedSessionId設置爲閥門中X-Auth-Token標題的內容,我已經對Tomcat說謊了,但我懷疑這發生得太遲而無法決定將請求發送到新版本。
  4. 如果無法對Tomcat說謊,定製會話管理器是否可以解決問題?它對我來說似乎並不是這樣,因爲它似乎是在沒有諮詢會話管理器的情況下是否有請求中的會話信息得到回答的是或否的問題。
+0

前兩個答案是對我來說是正確的。匹配發生在'CoyoteAdapter.postParseRequest()'中,並且它使用配置的方法來查找會話ID。可悲的是,'postParseRequest()'在閥門被調用之前發生,所以這不能用來將會話ID注入到請求中。 – dkilmer

回答

0

如果將會話存儲到memcached中並將粘滯設置爲false,Tomcat將不會自行處理會話,但每次必要時都會從memcached讀取會話。

因此,Tomcat將取消舊版本的部署,因爲新版本沒有檢查會話,因爲Tomcat不處理會話。

這對我們來說非常有用。當我們需要部署新版本時,我們不需要使用滾動升級和更改負載平衡器。