我可以使用sidekiq / redis获取worker的执行方法中的当前队列吗?

时间:2014-09-24 16:10:58

标签: redis queue sidekiq worker

我希望能够删除队列中的所有作业,但我不知道它是什么队列。我正在执行我的工作方法,我需要获取当前队列",即当前作业来自的队列。

我这次使用:

require 'sidekiq/api'
queue = Sidekiq::Queue.new
queue.each do |job|
  job.delete
end

因为我只是使用"默认队列",它的工作。

但是现在我将使用很多队列而且我不能为这个worker指定一个队列,因为我需要使用一个队列来进行服务器负载平衡。

那么我如何才能获得我们在执行方法中的队列?

THX。

2 个答案:

答案 0 :(得分:2)

你无法通过设计,这是工作的正交背景。如果您的工作需要知道队列名称,请将其明确地作为参数传递。

这要快得多:

Sidekiq::Queue.new.clear

答案 1 :(得分:0)

这些docs表明您可以访问所有正在运行的作业信息,其中包括每个作业的perform(作业ID)和队列名称

jid方法内,您可以使用workers = Sidekiq::Workers.new this_worker = workers.find { |_, _, work| work['payload']['jid'] == jid } queue = this_worker[2]['queue'] 访问器访问jid。从中您可以找到当前作业并获取队列名称

load_replies =driver.find_elements_by_xpath("//div[@class='thread-node-children-show']/span")
for i in (load_replies):
      WebDriverWait(driver, 10).until(EC.visibility_of(i))
      i.click()

但是,Sidekiq :: Workers的内容最多可以过期5秒钟,因此,仅应在您的工作者运行至少5秒钟后尝试尝试,这可能不是理想的选择