更新
我后来发现这不是 Struts2 的问题,而是应用程序服务器的问题。在生产环境中,我的 tomcat 实例落后于 Apache,如果在 60 秒内没有响应,它会重试 HTTP 请求。我总是可以增加此限制,但出于我的目的,这不是一个可行的解决方案,因此我计划立即返回高延迟请求,生成一个requestToken
并对此令牌进行长时间轮询,以查看是否已生成响应。
原始问题
我正在使用 Struts2 框架(版本 2.2.3)。有些动作需要 60 多秒才能解决。在这种情况下,当struts.devMode
设置为false
ie prod 环境设置时,struts2 会使用与之前相同的参数对操作进行重试,并且之前的操作仍在运行。struts.devMode
设置为时不会发生这种情况true
。
只是重申这不会发生在struts.devMode
设置为true
并且不落后的本地开发机器上apache
。
我可以通过从浏览器 ping 到这个方法来非常简单地重现这个(发生在 chrome、FF 中)
public String sleepForTime() {
try {
for (int ii=0; ii<sleepForSeconds; ii++) {
System.out.println("\n\n\nSTART Sleeping iteration " + (ii+1));
Thread.sleep(1000);
System.out.println("END Sleeping iteration " + (ii+1));
}
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
return SUCCESS;
}
当我设置sleepForSeconds
为小于 60 时,一切正常。但是,一旦我设置为以上任何内容,它就会每 60 秒再启动一个请求。我需要调整一个参数以使其不会发生吗?