Я использую встроенный причал (9.4.14.v20181114) для реализации следующей настройки
.
Как показано на рисунке, все клиенты обращаются к прокси-серверу, и в соответствии с некоторыми бизнес-правилами прокси-сервер перенаправляет на один из веб-серверов.
используя метод пристани 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"
Есть ли способ увеличить этот тайм-аут или полностью его удалить.
Я пробовал следующие 2 вещи, но ни одна из них не работала
- Установить idleTimeout для ServerConnector
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
, тогда как веб-сервер, который фактически обрабатывает запрос, все еще обрабатывает его.