2016-03-21 7 views
0

Дано:Понимание HTTP 504 Результат от Spray Web Service

client <-- HTTP --> spray web service <-- HTTP --> other web service

client получает следующий код статуса HTTP и сущности тела при ударе о spray web service:

504 Gateway Timeout - Empty

За этим answer , я понимаю, что spray web service не получает своевременный ответ от other web service , и, таким образом, отправив HTTP 504 на номер client.

Если предположить, что это разумно, в https://github.com/spray/spray/blob/master/spray-http/src/main/scala/spray/http/StatusCode.scala#L158, я предполагаю, что один из этих serverconfig values отвечает за 504 в HTTP ответ spray web service «s к client.

Какая конфигурация или неявная причина приведет к тому, что spray web service ответит 504 на client?

+1

Эта проблема может возникнуть, когда HTTP запросы 'другой веб' обслуживания тайм-аут. Это может быть вызвано плохой конфигурацией сети или ssl. –

ответ

0

Я думаю, что вы используете тайм-ауты Spray по умолчанию и, возможно, вам нужно будет увеличить их. Если это так, есть два значения, которые вам нужно будет настроить для увеличения тайм-аутов.

  1. idle-timeout: время, когда вы можете иметь незанятое соединение с вашим сервером до его отключения (по умолчанию 60 секунд).
  2. request-timeout: Время запроса от вашего клиента (от вашего сервера к другому) может быть простоя перед его перерывом (по умолчанию 20 секунд).

Первое значение должно быть всегда выше второго, так как время ожидания будет бессмысленно связывать соединения с вашим клиентом запроса.

Так просто перезаписать конфигурации в application.conf так:

spray.can { 
    server { 
     idle-timeout = 120 s 
     request-timeout = 20 s 
    } 
} 
+0

Из моего [тестирования] (https://groups.google.com/forum/#!topic/spray-user/c40gsTAcYmc) также необходимо увеличить тайм-аут 'sendReceive'. –

+0

Я полагаю, что вам также нужно будет обновить ваши свойства http-клиента следующим образом: 'spray.can {client {idle-timeout = 120 s request-timeout = 20 s}}' –