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