2017-04-14 8 views
0

特定の条件が満たされている場合、特定のアイテムのSidekiq再試行キューをクリアする、非常にミッションクリティカルなコンポーネントがあります。 SidekiqのテストAPIは、再試行キューに追加する方法を提供していなかったので、私は何かカスタムを考え出す必要がありました。再試行キューに追加するにはサイドキックの再試行キューのテスト

答えて

0

def add_retry(object: @object, klass: 'HardWorker', at: Time.now.to_f) 
    payload = Sidekiq.dump_json(
     class: klass, 
     args: [object.id, object.class, 'sidekiq_retry_test'], 
     queue: 'user_integration', 
     jid: rand(1..10000), 
     retry_count: 20, 
     failed_at: Time.now.to_f 
    ) 

    Sidekiq.redis do |conn| 
     conn.zadd('retry', at.to_s, payload) 
    end 
    end 

あなたはペイロードハッシュ内の何かを変更することができます。キューを指定するか、より堅牢なソリューションを追加してジョブIDを選択することができます。これは私たちのために働いたものです。

事後に再試行キューをクリーンアップする必要があります。 teardownまたはafter(:all)ブロック内でこれを行う必要があります。

def cleanup_retry_queue 
    Sidekiq::RetrySet.new.each do |job| 
     job.delete if job.args[2] == 'sidekiq_retry_test' 
    end 
    end 

実際にはキューに追加されるので、注意してください。再試行キューに依存するテスト可能なコンポーネントがある場合にのみ、これを使用します。 Sidekiqのキュー機能をテストするためにこれを使用しないでください。

関連する問題