我有一個客戶端發送http請求來下載文件的場景。該文件需要動態生成,通常需要5-15秒。因此我正在研究一個解決方案,將這個操作分成3個http請求。用RabbitMQ獲取長時間運行任務的結果
- 第一個請求觸發生成該文件。
- 客戶端輪詢服務器每5秒檢查文件是否已準備好下載
- 當到輪詢請求的響應是積極的,在客戶端開始下載文件
要實現這一點,我很期待到像RabbitMQ這樣的Message Queue解決方案中。他們似乎提供了一個可靠的框架來異步運行長時間運行的任務。然而,在閱讀RabbitMQ上的tutorials後,我不確定我將如何收到操作結果。
這是我心中一直:
前端服務器接收來自客戶端的請求,並根據需要將其張貼消息的RabbitMQ。該前端服務器將具有3個端點
/generate
/poll
/download
當客戶機調用/generate
與GET
參數說request_uid=AAA
,前端服務器將發佈消息的RabbitMQ與有效載荷中的request_uid。任何免費的工作人員隨後都會收到此消息並開始生成對應於AAA
的文件。
客戶端將繼續輪詢/poll
與request_uid=AAA
檢查任務是否完成。
當任務完成時,客戶端將調用/download
,request_uid=AAA
希望下載文件。
問題是前端服務器的/poll
和/download
處理程序將如何知道文件生成作業的狀態? RabbitMQ如何將任務結果傳回生產者。還是我必須在RabbitMQ之外實現這樣的機制? (消費者把它生成的文件/var/completed/AAA
)