1. 概要
・Sidekiq は、Rails アプリケーションでバックグラウンド ジョブを実行するための gem です。
・Sidekiq は、マルチスレッドと Redis を使用して複数のジョブを同時に処理します。
・Redis は、ジョブをキューに格納するためのデータベース ストアとして理解されます。
2. コンフィギュレーション
Sidekiq:
Gemfile
に次の行を追加します: gem "sidekiq"
次に、bundle install
を実行します
Redis:
次のリンクに従って Redis をインストールします: https://redis.io/topics/quickstart
ファイル config/initializers/sidekiq.rb
で Redis に接続するように Sidekiq を構成します。
Sidekiq.configure_server do |config|
config.redis = {
url: "redis://127.0.0.1:6379/12"
}
end
Sidekiq.configure_client do |config|
config.redis = {
url: "redis://127.0.0.1:6379/12"
}
end
3. 活動の流れ
Sidekiq は、sidekiq クライアント、sidekiq サーバー、redis の 3 つの主要部分で構成されています。
sidekiq クライアント:
・Redis のキューにジョブをプッシュする責任があります。
・JSON.dump
関数を使用して、データをハッシュに変換します。
・注意: 渡される引数は、string、integer、boolean、float、null(nil)、hash、array
などの単純な json 型である必要があります
sidekiq サーバー:
・処理のために Redis のキューからジョブを取得する責任があります。
・Worker を開始し、渡されたパラメーターを使用して perform 関数を呼び出します。
redis: ジョブを保存するところです
4. ジョブのライフサイクル
1.Scheduled:実行待ちのジョブ一覧
2.Enqueued: キュー内のジョブを実行中
3.Busy:ジョブ実行中
4.Failed カウンター:
ジョブが実行されたものの、失敗して完了しなかった回数。
デフォルトでは、ジョブが破棄されるまでに失敗できる回数は 25 回です。
回数を超えると、ジョブはデッド キューに移動されます。
ジョブを作成するとき、次のようにカスタマイズできます: sidekiq_options :retry => 5
5.Processed: ジョブが完了しました
6.Retries:
ジョブが失敗した場合、失敗カウンターが許可された失敗回数を超えていなければ、ジョブは常に再試行キューに含まれます。
7.デッドキュー:
許容回数を超えなかったジョブは、デッドキューにプッシュされます
5. 使い方
Sidekiq と Redis を構成したら、Sidekiq を使用する準備が整いました。
次のコマンドを実行します: rails g sidekiq:worker Hard
その後、ファイル app/workers/hard_worker.rb
が自動的に作成されます。 または、そのファイルを手動で作成することもできます。
class HardWorker
include Sidekiq::Worker
def perform(*args)
# do something
end
end
その中で、 perform はバックグラウンドで実行されているタスクを実行する関数になります。
*args
は渡される引数です。 入力引数は、string、integer、boolean、float、null(nil)、hash、array
などの単純な json
型でなければならず、symbol, name parameter、Date、Time
などの ruby オブジェクトを使用しないでください。
バックグラウンドで実行するジョブを作成します。
・非同期処理用のジョブを作成します。
HardWorker.perform_async('bob', 5)
デフォルトでは、sidekiq スケジューラーは 5 秒ごと (sidekiq < 5.1 の場合は 15 秒) にスケジュール ジョブをチェックし、config/initializers/sidekiq.rb
ファイルでその値をリセットできます。
Sidekiq.configure_server do |config|
config.average_scheduled_poll_interval = 15
end
テスト実行: 実行するには、3 つのタブを開く必要があります
・タブ 1: redis-server redis-server
を実行する
・タブ 2: sidekiq bundle exec sidekiq
を実行する
・タブ 3: rails s
サーバーを実行する