2013-11-15 95 views
3

我使用Sidekiq來運行在控制器中延遲的方法(同時我使用Redis更新進度條)。此方法調用服務器,檢索數據,進行一些操作和計算;那麼可能需要一段時間。延遲方法的Sidekiq返回值

例如,我有這樣的方法:

data_and_status = MyModelName.delay.retrieve_data(params[:tags], "preview", current_user, params[:from], params[:to]) 

這個方法應該返回數據操縱,但以這種方式data_and_status做的是一個散列(我想這是Sidekiq在職-ID)。 返回的數據非常大,使用Redis進行緩存很不幸。

如何檢索延遲作業(方法)的return value

回答

4

您認爲(從您的異步作業中)返回的數據非常大,並且通過Redis進行中繼不成問題。那麼,您的sidekiq作業將運行在不同的進程中,甚至可能在不同的服務器上運行,因此您必須找到一些進程間傳輸數據的方式 - 如果不是您的消息隊列(Redis),則是數據庫。

例如:

enter image description here

+0

謝謝您的回覆!那麼你建議使用數據庫在某個地方存儲一個標誌,指示工作的「狀態」?當完成從db或從/ tmp中的文件檢索結果數據? – damoiser

+0

如果您只想檢查作業的狀態,可以使用sidekiq插件來追蹤該作業:請參閱https://github.com/mperham/sidekiq/wiki/FAQ#how-can-i-tell-when-一個在職具有成品 – Eero