我是否需要将所有内容放在app / workers中以供sidekiq使用?

问题描述 投票:1回答:2

我目前正在从DJ迁移到sidekiq并且有许多普通的旧红宝石对象,我会这样使用:

Delayed::Job.enqueue(SomeService.new(id))

我以为我可以将SomeService移动到app/workers文件夹并添加include Sidekiq::Worker但它不会进入sidekiq队列而只是调用当场执行

class SomeService
  include Sidekiq::Worker

  def initialize(id)
    @some_instance = SomeClass.find_by(id: id)
  end 

  def perform
    @some_instance.do_something
  end
end

所以我必须创建一个sidekiq工作者来调用该服务

class SomeServiceWorker
  include Sidekiq::Worker

  def perform(id)
    SomeService.new(id).perform
  end
end

有没有办法只使用SomeService,它包含一个初始化方法和执行方法,所以我不必创建一个工作者来调用我的服务对象?

ruby-on-rails ruby sidekiq
2个回答
1
投票

你做的只有一个错误,你忘记在第一个文件中的类名中添加“工人”字样!

class SomeServiceWorker
  include Sidekiq::Worker

  def initialize(id)
    @some_instance = SomeClass.find_by(id: id)
  end 

  def perform
    @some_instance.do_something
  end
end

这段代码将运行您的工作人员

SomeServiceWorker.new(id).perform

1
投票

Sidekiq并不关心文件的位置和/或它们的命名方式,只要它们包含Sidekiq::Worker即可。但是,惯例是将所有工作者放在app/workers目录中并将它们命名为MyWorker

然后您可以将它们称为:

MyWorker.perform_async params
© www.soinside.com 2019 - 2024. All rights reserved.