两个工作,同一个工人使用ActiveJob与Sidekiq

时间:2018-02-23 20:49:48

标签: sidekiq rails-activejob

对于不同的工作,是否有建议的约定使用相同的工作类?我正在努力避免为从父级生成的子作业创建一个单独的作业类。

我意识到Sidekiq :: Batch可以处理来自父级的跟踪衍生作业,但它不能解决使用相同类来处理不同的作业。

例如:

# not ideal: requires separate child job class
class ParentJob < ApplicationJob
  def perform(*args)
    MyModel.all.each { |f| ChildJob.perform_later(f) }
  end
end

# ideal - allows re-use of same class
class ParentJob < ApplicationJob
  def perform(*args)
    # doesn't work, but shown here conceptually
    MyModel.all.each { |f| self.class.perform(:foo, f) }
  end

  def foo(f); end
end

我可以查看父作业的args,如果它包含一个特殊的键,分支并运行一个不同的方法,但我不喜欢这种方法的模糊契约。

0 个答案:

没有答案