2012-03-05 50 views
1

我需要實現一項功能,如果resque作業在特定時間內未得到處理,該功能可以讓resque作業超時。如何設置resque作業的超時時間

因此,我們可以說創建了一份工作,但由於排隊太長和/或沒有足夠的工作人員關閉,因此無法在一個小時內處理。

我不想在這種情況下刪除工作......最好的辦法是什麼?也許有一個配置參數,我正在監督或第三方寶石?

感謝

+0

https://rubygems.org/gems/resque-timeout是應該超時工作的寶石。不知道是否刪除 – ScottJShea 2012-03-05 01:29:00

+0

已經檢查...它殺死長時間運行的resque任務。所以不是我正在尋找的東西:( – Matthias 2012-03-05 01:30:48

回答

1

我不知道是否有一種方法在默認情況下做到這一點的Resque,但它不會是很難做到的自己。

在你的工作做這樣的事情:

def perform(id, queued_at) 
    return false unless Time.parse(queued_at) >= 1.hour.ago 

    ... 
end 

而要排隊工作,做到:Resque.enqueue(MyJobClass,object.id,DateTime.now)。第一行將自動轉儲作業,並在作業排隊時間超過一小時前阻止作業執行。

+0

謝謝。我們會做這個工作,我只是想知道是否是一個簡單的方法來直接從resque訪問queued_at字段!? – Matthias 2012-03-05 02:24:27

+0

我很自信Resque doesn' t甚至打擾跟蹤queued_at,所以不,除非你自己跟蹤它,否則沒有辦法訪問它。 – Veraticus 2012-03-05 02:38:21

+0

好的,謝謝你們 – Matthias 2012-03-05 06:32:36