ruby 如何杀死Sidekiq工人?

brgchamk  于 2023-01-30  发布在  Ruby
关注(0)|答案(3)|浏览(178)

我有一个应用程序,在每次部署后需要杀死特定的Sidekiq工作者。正如api所建议的,我可以通过从队列Sidekiq::Queue.new.clear中删除所有作业来完成。
然而,运行这个命令后,工作线程大小Sidekiq::Workers.new.size的数量仍然相同。实际上,我已经尝试了很多方法,但没有任何效果。请帮助!

5cnsuln7

5cnsuln71#

一旦工作线程开始处理作业,您就不能在不关闭整个进程的情况下从外部停止它。没有安全的方法可以停止线程。
您可以通过定期检查员工代码以查看是否应该停止(类似于作业取消),在自己的代码中添加停止员工的功能。

1tu0hz3e

1tu0hz3e2#

我自己还没试过,但根据文件:
您可以将所有要删除的工作线程添加为队列的一部分(例如post_deploy)

class MyWorker
  include Sidekiq::Worker
  sidekiq_options :retry => 5, :dead => false, queue: :post_deploy

  def perform()
  ...
  end
end

要删除工作机:

require 'sidekiq/api'
Sidekiq::Queue.new("post_deploy").clear

要查找队列下的作业数,需要按以下方式查找

Sidekiq::Queue.new("post_deploy").size

为了只查找当前正在运行的Sidekiq线程数,您将使用Sidekiq::Worker.size
如果我误解了你的问题,请告诉我。

gab6jxml

gab6jxml3#

简单回答。终止进程。然后运行此命令。

Sidekiq::Queue.new("default").clear

“default”是您的队列名称。

相关问题