2013-02-09 41 views
3

在Heroku上,使用Play Framework,是否有必要設置後臺作業處理器(使用Akka/RabbitMQ /等)來執行繁重的任務*?在Heroku上使用Play Framework的後臺作業

我知道Play提供了在請求內異步執行任務的能力,但是這足以避免需要後臺作業處理器嗎?在非Heroku部署的獨立Play應用中,異步功能可以在一個進程中完成所有功能,但在Heroku應用中,似乎還不夠:根據Professional Heroku Programming(第254頁,使用Ruby進行開發部分),在接收到請求和傳遞響應的時間之間,Web dyno被阻止,並且在此期間所有其他請求都排隊。

如果需要後臺作業處理器,是否有任何示例?我見過Play和Akka,Play和Heroku的例子,但不是所有三個在一起。 *(通過繁重的任務,我通常意味着需要答案的潛在長時間運行的任務,例如複雜的數據庫查詢或Web服務調用的結果賦予最終用戶,而不是消防系統,忘記一些事情,如發送電子郵件)。

+0

在當前雪松(* .herokuapp.com)其中Play應用運行棧,[同時連接支持](https://devcenter.heroku.com/articles/http-routing#simultaneous-connections)。您提到的網頁動態阻止僅在較舊的Bamboo堆棧上。 – ryanbrainard 2013-02-10 06:54:01

回答

3

使用Play時,您不需要明確的工作人員。 Play 2的常見模式是在控制器中使用Async response,在較長時間運行的過程中使用Akka。 Play Framework網站上的所有示例都應該在Heroku上開箱即用。

+0

請問使用一個異步響應適合於該需要更長的時間超過30秒來完成(即,超時時間爲web DYNO)任務? – kes 2013-02-28 02:41:39

+2

對不起,剛纔看到你的回覆。如果請求花費的時間超過30秒,那麼你可以做幾件事: *每隔20秒發送一次保持活動狀態。這將保持連接在路由器層打開。 *使用隊列並進行客戶端輪詢。我們使用Redis來實現這一點。我們立即用UUID迴應的東西,在Redis的,返回一個202使用包含在客戶端可以查詢位置的Location頭,然後當工作完成後,未來的更新Redis的,結果發回給客戶端下一次民意調查。 – 2013-03-19 17:15:34

+0

謝謝。這很有幫助。 – kes 2013-03-21 14:13:51

相關問題