首页 > 解决方案 > 检查触发特定 Job id 的工作人员名称

问题描述

我正在开发一个 Ruby on Rails 项目。我想知道是否可以使用作业 ID 获取触发特定作业的工人姓名,以便在完成后显示适当的消息。这可能吗?还是我应该将工人姓名保存在模型中?

#I have a method that creates the job

def generate

   my_model.job_id = HardWorker.perform_async()
   my_model.save!
end

def check_status
   if job_id && Sidekiq::Status::complete?(my_model.job_id)
      # if HardWorker
      #    "HardWorker is done!"
      # elseif AnotherWorker
      #    "AnotherWorker is Done!"
      # end
   end
end

标签: ruby-on-railsredissidekiq

解决方案


您可以使用以下代码通过作业 ID 获取 Worker Class:

queue = Sidekiq::Queue.new
job = queue.detect { |job| job.jid == job_id //<-- the job id you have from perfrom_async }

您的代码将是这样的:

def check_status
  queue = Sidekiq::Queue.new
  job = queue.detect { |job| job.jid == my_model.job_id }

  if job_id && Sidekiq::Status::complete?(my_model.job_id)
    puts "#{job.klass} is done" <-- The worker that triggered the job
  end
end

更多关于队列在这里


推荐阅读