【问题标题】:How to get job id in second worker when calling second worker from first worker从第一个工作人员调用第二个工作人员时如何在第二个工作人员中获取工作 ID
【发布时间】:2023-05-10 23:43:02
【问题描述】:

我正在使用 sidekiq 处理后台作业。

class MainWorker
 def perform(from_date, to_date) 
   Rails.logger.info "In MainWorker, job id #{jid}"
   SampleWorker.new.perform(from_date, to_date)
 end
end

class SampleWorker
 def perform(from_date, to_date) 
   Rails.logger.info "In SampleWorker, job id #{jid}"
 end
end

我从 MainWorker 调用 SampleWorker。打印时,我在 MainWorker 中获得 Sidekiq 作业 ID。但是当我打印时,我在 SampleWorker 中看到 Job id 为 nil。

如何在不作为参数传递的情况下从 MainWorker 获取 SampleWorker 中相同的作业 ID?

是否有任何可用的会话选项?如果是,我该怎么做?

【问题讨论】:

  • 您的MainWorker 工作如何排队?在我看来,jidSampleworker 而不是在Mainworker 中为零的唯一方法是它们的排队方式不同。注意:aync = async 的拼写错误?
  • @MatthieuLibeer 是的。这是正确的。 jid 在 Sampleworker 中为零,在 Mainworker 中不为零。有没有办法通过在执行中作为参数传递来将 jid 从 MainWorker 获取到 SampleWorker。我还更新了一个从 aync 到 async 的错字
  • jid 在 perform 方法中不应该为 nil。您的设置有问题。您使用的是 Sidekiq::Testing.inline 还是其他一些不寻常的设置?
  • @MikePerham 我在 MainWorker 中调用 SampleWorker.new.perform(from_date, to_date)。我没有使用 Sidekiq::Testing.inline。如果我必须在 MainWorker 中调用 Sampleworker,我是否必须使用 Sidekiq::Testing.inline?

标签: ruby-on-rails jobs sidekiq


【解决方案1】:

您没有创建 SampleWorker 作业,因此没有分配 JID。要创建 SampleWorker 作业,您必须调用 perform_async。直接调用 SampleWorker.new.perform 会完全绕过 Sidekiq。

【讨论】: