对于不同的工作,是否有建议的约定使用相同的工作类?我正在努力避免为从父级生成的子作业创建一个单独的作业类。
我意识到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,如果它包含一个特殊的键,分支并运行一个不同的方法,但我不喜欢这种方法的模糊契约。