簡體   English   中英

使用mod_jk,tomcat和jersey,如何保持長時間運行的請求?

[英]With mod_jk, tomcat, and jersey, how do you keep a long running request alive?

在客戶端,我們使用HttpClient進行通信。 在服務器端,我們使用Jersey和tomcat。

我們的要求是這樣的

客戶端 - >負載均衡器 - >服務器

問題是這樣,客戶端會向服務器發出請求; 該請求溢出了mod_jk的180秒超時,導致負載均衡器終止連接。 我需要的是向mod_jk發信號通知“是的,這個連接是活着的並且正在進行”的一些方法,這樣它就不會終止連接。 或者,如果我們可以向mod_jk發出“此請求可能需要很長時間”的信號,那將是很好的。

我們現在在負載均衡器中沒有出色的解決方案,我們已經將socket_timeout提升到20分鍾。 更好的解決方案是讓服務器發出信號表明它仍在工作。 最好的解決方案是讓請求運行得更快(最長時間為12分鍾)。

如何使服務器發出信號表明它仍在前進? 不幸的是,發送部分數據對我們來說並不是很有效,因為這個請求是為了得到一個昂貴的大對象而且該對象確實不是可流動的。

Tomcat具有不同的響應輸出流實現。

不同的行為是由連接負載均衡器和Tomcat的AJP連接器引起的(只是猜測你使用的是AJP)。 使用Tomcat獨立版,可以寫入響應輸出流並緩沖內容。 當您寫入由AJP連接器支持的響應輸出流時,會立即刷新內容。 這是有道理的,因為如果沒有從Tomcat傳遞到負載均衡器的恆定數據流,它會在將其視為超時后“掛斷”。

所以,我建議你找到一些方法,在准備真實的響應工資負載時,不斷或定期發送“一些數據”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM