0
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 5 years have passed since last update.

SidekiqとResqueとの互換性 [翻訳]

Posted at

SidekiqとResqueとの互換性

最終更新 2019/02/20 編集者 Mike Perham

Resqueを既に使用しているユーザーがSidekiqを簡単に試すことができるように、Sidekiqを可能な限りResqueと互換性のあるものにしようとしています。

  • Sidekiqは、Resqueとまったく同じメッセージ形式をRedisで使用するため、同じメッセージを処理することもできます。

  • このため、ResqueのクライアントAPIはSidekiqが処理するためのメッセージをRedisにプッシュすることができます。

Sidekiqでは、ワーカーがスレッドセーフである必要があるため、若干異なるワーカーAPIが必要です。
Resqueは、performメソッドがクラスメソッドであると想定しています。これは、Sidekiqのマルチスレッド環境では非常に危険です。(例えば、クラスインスタンス変数が事実上グローバル変数になってしまいます)

Resqueの場合:

class MyWorker
  def self.perform(name, count)
    # do something
  end
end

Sidekiqの場合:

class MyWorker
  include Sidekiq::Worker
  def perform(name, count)
    # do something
  end
end

大きな変更ではありませんが、ワーカーの作成がより簡単で直感的になっています。

クライアントAPI

Sidekiqには、ジョブをキューにプッシュするためのResqueと同一のAPIがあるため、プロジェクトで簡単に検索および置換できます。

Resqueの場合:

Resque.enqueue(MyWorker, 'bob', 1)

Sidekiqの場合:

Sidekiq::Client.enqueue(MyWorker, 'bob', 1)
# 下記のコードと同じです。
MyWorker.perform_async('bob', 1)

Sidekiq::Client にはResqueの resque-scheduler との互換性のための enqueue_in もあります。

パフォーマンス

resqueおよびdelayed_jobはどちらもシングルスレッドプロセス設計を使用しており、これはスレッドベースと比較して非効率です。Sidekiqは通常、桁違いに高速です。

機能性

Sidekiqには、そのままの状態でResqueよりも多くの機能が含まれています。例えば、Sidekiqには、resque-scheduler、resque-web、resque_mailer、resque-retryのほとんどの機能がgemに含まれており、それらの機能を使用するためのカスタム構成はほとんど必要ありません。

プラグイン

Sidekiqは、Resqueのコールバックベースのプラグインをサポートしていません。ジョブの処理に関するコードを実行する独自のフックを登録するためのMiddleware APIを提供します。

制限事項

ResqueクライアントAPIでキューに入れられたジョブには、ペイロードに再試行のためのパラメーターがありません。
これは、失敗したジョブは自動的に再試行されないことを意味します。再試行機能が適切に動作するようにSidekiq APIを使用してコードを移行してください。

Redis

Resqueでネームスペースを使用している場合は、同じネームスペースを使用するようにSidekiqを構成してください。
そのためには、下記のコードを sidekiq.rb に追加します。

# Add gem 'redis-namespace' to your Gemfile too
Sidekiq.configure_client do |config|
  config.redis = { namespace: 'resque' }
end
Sidekiq.configure_server do |config|
  config.redis = { namespace: 'resque' }
end
0
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
0
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?