2017-04-14 88 views
0

如果满足某些条件,我们有一个相当关键的组件清除某个项目的Sidekiq重试队列。 Sidekiq的测试API没有办法添加到重试队列中,所以我们必须提供一些自定义的东西。测试Sidekiq的重试队列

回答

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。这只是对我们有用的东西。

您将需要在事后清理重试队列。您应该在teardownafter(:all)区块内执行此操作。

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

请记住,这实际上将添加到队列中,所以要小心。只有拥有依赖重试队列的可测试组件时才可以使用它。不要用它来测试Sidekiq的排队功能本身。