繁体   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