0

Heroku で無限の数のワーカーが作成されていないことを確認したいと思います。

私はherokuの時計仕掛けの宝石によって開始された次の仕事をしています:

every 5.minutes, SyncAccounts

同期アカウントは次のようになります。

  def perform
    UserRepo.all.each do |user|
      EnqueueFolderSyncJobs.perform_async user.id
      SyncContacts.perform_async user.id
      SyncMeetings.perform_async user.id
    end
  end

すべてのユーザーを反復処理し、さらにワーカーを作成します。これらの各ワーカーは、さらにワーカーを作成する場合があります。たとえば、EnqueFolderSyncJobs は imap フォルダーを同期するワーカーを作成します。

  google.email.folders.each do |folder|
    SyncFolder.perform_async user_id, folder unless skip?(folder)
  end

したがって、5分ごとにこれが起こっています。

perform_async の呼び出しは、ジョブが 1 回だけ発生することを意味しますか?

このすべての終わりにコールドレインが必要ですか?

また、すべてのワーカーが同じキューの下に作成されています。たとえば、SyncFolders 用に別のキューを作成する必要がありますか?

4

1 に答える 1

0

デフォルトでは、Sidekiq は同時実行を 25 ワーカーに制限します。必要に応じて sidekiq.yml でそれを増やすことができます。しかし、その同時実行性が、「無限の」ワーカーからそれを制限するものです。https://github.com/mperham/sidekiq/wiki/Advanced-Options#concurrency

「perform_async」を呼び出すということは、そのジョブを 1 回呼び出していることを意味し、失敗して再試行された場合にのみ再び発生します。一部のジョブが優先され、常に最初に処理されなければならない場合を除き、別のキューを作成する理由はありません。https://github.com/mperham/sidekiq/wiki/Advanced-Options#queues

テスト環境以外では、.drain を呼び出す必要はありません。

すべてのジョブを一度にキューにダンプするのではなく、ワーカーを特定のワークフローで処理したい場合 (この例では重要ではないようです)、Sidekiq Superworker を見てください。私自身は使っていませんが、面白そうです。

https://github.com/socialpandas/sidekiq-superworker

于 2013-11-05T16:19:52.280 に答える