2012-09-27 35 views
0

當某些條件得到滿足時,我想安排一名工人在5分鐘內完成一項特定工作。問題是,如果再次遇到相同的條件,我想檢查是否有計劃要運行的東西。如果有這樣一個工人計劃跑,那麼,我不想再入隊,但如果沒有,它應該排隊。我希望你們明白我想要做的事情。它可以實現嗎?如果是,如何?如何從我的代碼中檢查Sidekiq中是否有東西入隊?

回答

2

聽起來像你想要使用或實現一個簡單的持久鎖。排隊作業的代碼可以首先檢查鎖的可用性,如果可用,則獲取並排隊,如果不可用則跳過。排隊的工作可以負責釋放鎖。您需要考慮失敗,例如添加鎖定超時。寶石可能是這個想法的有用實現。

+0

非常感謝,這對我真的很有用 –

1

最佳實踐可以促進冪等的工作。這意味着你應該以這樣的方式編寫它們,以便多次運行它們應該是安全的。任何後續的呼叫都不會改變第一個呼叫的結果。通過編寫適當檢查的邏輯來實現這一點,並相應地採取行動。既然你沒有提供你的工作者的描述,我不能更具體。

舉一個例子,這裏是對Sidekiq的常見問題解答的鏈接:Make your workers idempotent and transactional

這種方法的好處是,你沿着預定工人的便利抽象打,而不是反對它的戰鬥。

相關問題