我希望能够删除队列中的所有作业,但我不知道它是什么队列。我正在执行我的工作方法,我需要获取当前队列",即当前作业来自的队列。
我这次使用:
require 'sidekiq/api'
queue = Sidekiq::Queue.new
queue.each do |job|
job.delete
end
因为我只是使用"默认队列",它的工作。
但是现在我将使用很多队列而且我不能为这个worker指定一个队列,因为我需要使用一个队列来进行服务器负载平衡。
那么我如何才能获得我们在执行方法中的队列?
THX。
答案 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秒钟后尝试尝试,这可能不是理想的选择