0
如果满足某些条件,我们有一个相当关键的组件清除某个项目的Sidekiq重试队列。 Sidekiq的测试API没有办法添加到重试队列中,所以我们必须提供一些自定义的东西。测试Sidekiq的重试队列
如果满足某些条件,我们有一个相当关键的组件清除某个项目的Sidekiq重试队列。 Sidekiq的测试API没有办法添加到重试队列中,所以我们必须提供一些自定义的东西。测试Sidekiq的重试队列
要添加到重试队列:
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的排队功能本身。