我在http調用之後做了一個很長的過程,並且在響應中收到此錯誤(503)。經過長時間處理後的Heroku HTTP 503響應
我需要增加Dyno的TimeOut,任何人都知道如何?
異常
[router]: at=error code=H12 desc="Request timeout" dyno=web.1 connect=0ms service=30000ms status=503 bytes=0
我在http調用之後做了一個很長的過程,並且在響應中收到此錯誤(503)。經過長時間處理後的Heroku HTTP 503響應
我需要增加Dyno的TimeOut,任何人都知道如何?
異常
[router]: at=error code=H12 desc="Request timeout" dyno=web.1 connect=0ms service=30000ms status=503 bytes=0
我不能增加「Dyno的TimeOut」在Heroku。它是所有人的着名約束之一,並在30秒內由Heroku嚴格設定。您可以在這裏看到詳細信息
我的解決方案是使線程返回進程,我用長進程創建一個線程,並使用進程的索引「運行」,然後檢查它是否完成了請求通過5秒(或類似的東西)
您不能增加超時時間,但可以通過設置Transfer-Encoding: chunked
標題來保持連接打開。當Heroku的路由器看到這個時,它不會關閉連接。
下面是一個例子項目,正是這麼做的,並且使用的Servlet 3.1,以保持請求線程阻塞: https://github.com/kissaten/slow-service-example
相關的代碼是:
response.addHeader("Transfer-Encoding", "chunked");
也有一個很好的斯卡拉/播放例如,如果你是這樣的事情: http://www.jamesward.com/2015/06/02/redirecting-and-chunking-around-herokus-30-second-request-timeout
我喜歡它!這聽起來不錯!如果我可以,我會檢查這一個:) –
你能告訴我們任何代碼嗎? – Patrick