Ruby用バックグラウンドジョブライブラリ「sidekiq」のコードを読んでみる(前半)


自分が担当するRailsアプリケーションでバックグラウンドジョブを動かす必要が出てきた。

Railsでバックグラウンドジョブといえば二大巨頭の ResqueSidekiq があると思っている。どちらかといえば最近採用されているイメージがあるSidekiqに関して、どんなコードになっているか主要な部分をチェックしておきたい。

今回は、Railsにsidekiqを組み込んでジョブを登録する部分まで。Sidekiqを直接使ってジョブを登録する方法と、ActiveJob経由で登録する方法の2つを比べて見る。

まとめ

  • Sidekiqを直接使用する場合、Redisのコネクションプールを用意しておき、それを使用して各Jobの情報をキューにpushしているだけ。ジョブの登録に関してはシンプルだった。
  • ActiveJob経由もバックエンドを抽象化している分、少しコードが複雑になっているが、やっていることはほとんど同じだった。あとコードが綺麗で読みやすい。
  • Redisに登録される情報は以下の通り。
    • 「queues」というSetにキューの名前を登録。
    • 「queue:default」というListにジョブの情報を追加。ジョブの情報はクラス(class)、ジョブの引数(args)、ID(jid)等。
    • ActiveJob経由の場合、クラスは ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper になっている。

続きを読む →