【发布时间】:2019-01-15 09:54:54
【问题描述】:
我正在使用嵌入式码头 (9.4.14.v20181114) 来实施以下设置
.
如图所示,所有客户端都在访问代理服务器,并且根据一些业务规则,代理转发到其中一个 Web 服务器
使用码头的ProxyServlet#rewriteTarget 方法。为此,我定义了一个新的类,它扩展了 ProxyServlet 并覆盖了rewriteTarget
图中的每个服务器都部署在不同的机器上。
一些客户端请求需要一些时间来处理,事实证明,如果请求需要超过 30 秒,代理会以
响应客户端HTTP/1.1 504 Gateway Timeout
Date: Tue, 15 Jan 2019 09:04:37 GMT
Connection: close
Content-Type: application/json"
有没有办法增加这个超时时间或完全删除它。
我尝试了以下两件事,但都没有成功
- 设置 ServerConnector 的 idleTimeout
Server server = new Server();
ServerConnector connector = new ServerConnector(server);
connector.setHost(ip);
connector.setPort(port);
connector.setIdleTimeout(45000);
server.setConnectors(new Connector[] { connector });
- 在覆盖
rewriteTarget期间,我设置了this.setTimeout(45000);
public class RoutingServlet extends ProxyServlet {
...
@Override
protected String rewriteTarget(HttpServletRequest request) {
this.setTimeout(45000);
// ... business logic based on request body and headers ...
return rewrittenUrl;
}
...
}
这两种方法都对这种情况没有任何影响,并且在第 30 秒后,代理会以 HTTP/1.1 504 Gateway Timeout 响应客户端,而实际处理请求的 Web 服务器仍在处理它。
【问题讨论】:
标签: java jetty embedded-jetty jetty-9