[英]Sidekiq & Clock Background Task On Redis, Rails, Heroku Only Updating Some
[英]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.