簡體   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