4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Linkbal(リンクバル)Advent Calendar 2022

Day 21

「Ruby on Rails」Sidekiqジェムを紹介する

Last updated at Posted at 2022-12-13

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. ジョブのライフサイクル

jobcyclelife.png

1.Scheduled:実行待ちのジョブ一覧
2.Enqueued: キュー内のジョブを実行中
3.Busy:ジョブ実行中
4.Failed カウンター:

ジョブが実行されたものの、失敗して完了しなかった回数。
デフォルトでは、ジョブが破棄されるまでに失敗できる回数は 25 回です。
回数を超えると、ジョブはデッド キューに移動されます。
ジョブを作成するとき、次のようにカスタマイズできます: sidekiq_options :retry => 5

5.Processed: ジョブが完了しました
6.Retries:

ジョブが失敗した場合、失敗カウンターが許可された失敗回数を超えていなければ、ジョブは常に再試行キューに含まれます。

7.デッドキュー:

許容回数を超えなかったジョブは、デッドキューにプッシュされます

5. 使い方

SidekiqRedis を構成したら、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 サーバーを実行する

実行するジョブを作成して結果を確認する
1148e952-458f-4399-bca5-279259fa0578.png

6. 参考

https://github.com/mperham/sidekiq
4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?