繁体   English   中英

使用Redis,Sidekiq,Heroku和Rails了解后台工作者5

[英]Understanding Background Workers with Redis, Sidekiq, Heroku and Rails 5

我有一个Rails 5应用程序,在这里我开始使用Sidekiq,Heroku和Redis将各种作业移到后台。

到目前为止,我有具有相同名称的类的ResetFinanceDataWorker。

//reset_finance_data_worker.rb

class ResetFinanceDataWorker
  include Sidekiq::Worker
  sidekiq_options retry: false

  def perform()
  end
end

我可以通过调用ResetFinanceDataWorker.perform_in(10.seconds)来调用ResetFinanceDataWorker.perform_in(10.seconds) 理想情况下,我希望在一个文件中包含多个工作程序,如下所示:

//finance_worker.rb

class AnotherWorker
  include Sidekiq::Worker
  sidekiq_options retry: false

  def perform()
  end
end

class ResetFinanceDataWorker
  include Sidekiq::Worker
  sidekiq_options retry: false

  def perform()
  end
end

并能够调用FinanceWorker.AnotherWorker.perform_in(10.seconds)。 但是,这是不可能的。

有人可以向我解释1)我将如何进行这项工作? 和2)关于组织工作文件的最佳实践。

谢谢。

最佳做法和约定是在一个带有相应文件名的文件中仅放置一个类。 工人或任何其他阶层都没有关系。 如果要组织它们,可以将类似的工作程序包装在一个模块中,然后将其移动到单独的文件夹finance_worker

 module FinanceWorker  
   class AnotherWorker
   end
 end

在这种情况下,您可以调用FinanceWorker::AnotherWorker.perform_async

更新:

app/jobs创建一个单独的文件夹finance_worker然后将所有需要的工作程序文件移动到那里。 将所有这些worker类包装在module FinanceWorker 我的意思是,分开包装,仍然放在不同的文件中,仍然only one class, wrapped in module, inside the file

如果您有10名工作人员,则他们有10个文件。 但这是Sidekiq的工作人员,而不是heroku的工作人员,请不要混淆他们。 要启动Sidekiq,您只需要Procfile中的一行即可: worker: bundle exec sidekiq 这条线将为Sidekiq启动1个heroku工人dyno,这将启动他的所有10个工人。 没关系,这是常见的做法。 如果您注意到Sidekiq的1个dyno不够,您总是可以添加更多,它们将在队列之间划分队列。

并且不要忘记您可以为worker指定队列名称。 默认情况下,所有作业都进入常规default队列。 如果您希望某个工作人员拥有自己的队列,只需将其添加到sidekiq_options

sidekiq_options retry: false, queue: 'finance'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM