【问题标题】:Cancelling sidekiq worker by parameter通过参数取消sidekiq worker
【发布时间】:2012-08-17 07:32:48
【问题描述】:

我正在为我的员工使用 sidekiq。假设我为一名工作人员安排了 10k 个工作计划,但其中 4k 个工作仅来自一个用户,我怎样才能只取消与该用户相关的工作。 (假设 user_id 作为 worker 的参数发送)。

【问题讨论】:

    标签: ruby-on-rails ruby sidekiq


    【解决方案1】:

    可能有一种更有效的方法来执行此操作,但您可以做的是遍历队列中当前的作业,并删除符合您条件的作业,如下所示:

    def delete_jobs_by_user_id(queue, user_id)
      Sidekiq.redis do |r| 
        queue_key = "queue:#{queue}"
        jobs = r.lrange(queue_key, 0, -1) 
    
        jobs.each do |job|
          r.lrem(queue_key, 0, job) if JSON.load(job)['args'].include?(user_id)
        end 
      end
    end
    

    您需要添加更多检查以仅在您要查找的课程、arg 位于正确位置等情况下删除作业,但这应该会让您走上正确的轨道。

    显然,在 prod 上运行之前对其进行大量测试,并且可能不要在有大量积压的队列上运行它。但在紧要关头,它可以工作。

    【讨论】:

    • 这很有帮助,谢谢布赖恩。有没有办法使用上面的 sn-p 使用 JID 删除/取消作业。我试图即兴发挥它。
    • @TechFuel 当然只是检查JSON.load(job)['jid']
    猜你喜欢
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 2021-06-26
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多