使用mod_jk,tomcat和jersey,如何保持长时间运行的请求?

时间:2014-04-07 20:50:15

标签: java tomcat jersey httpclient

在客户端,我们使用HttpClient进行通信。在服务器端,我们使用Jersey和tomcat。

我们的请求看起来像这样

客户 - >负载均衡器 - >服务器

问题是这样,客户端会向服务器发出请求;该请求溢出了mod_jk的180秒超时,导致负载均衡器终止连接。我需要的是向mod_jk发信号通知“是的,这个连接是活着的并且正在进行”的一些方法,这样它就不会终止连接。或者,如果我们可以向mod_jk发出“此请求可能需要很长时间”的信号,那将是很好的。

我们现在在负载均衡器中不是很好的解决方案,我们已经将socket_timeout提升到20分钟。更好的解决方案是让服务器发出信号表明它仍在工作。最好的解决方案是让请求运行得更快(最长时间为12分钟)。

如何让服务器发出信号表明它仍在前进?不幸的是,发送部分数据对我们来说并不是很好,因为这个请求是为了得到一个昂贵的大对象而且对象真的不能流化。

1 个答案:

答案 0 :(得分:2)

Tomcat具有不同的响应输出流实现。

不同的行为是由连接负载均衡器和Tomcat的AJP连接器引起的(只是猜测你使用的是AJP)。使用Tomcat独立版,可以写入响应输出流,内容缓冲。当您写入由AJP连接器支持的响应输出流时,内容立即刷新。这是有道理的,因为如果没有从Tomcat传递到负载均衡器的恒定数据流,它将会“挂断”#34;在将此作为暂停处理之后。

所以,我建议你找到一些方法来连续或定期发送"一些数据"而真正的反应工资正在准备中。