Sidekiqでdelayを使う。しかし、クラスメソッドを使いダイナミックなQueue名を使わない

DelayedJobと比べると使い方が少し違うので注意が必要。

Extentionを読み込むとdelayが使える

config/initializers/sidekq.rbに下記を追加(存在しない場合は作成)。これで毎回performを書かなくて良い。

Sidekiq::Extensions.enable_delay! 

これで、User.delay.my_methodが使える!

https://github.com/mperham/sidekiq/wiki/Delayed-extensions

インスタンスメソッドを使わない

インスタンスメソッドでも一見動いたので大丈夫かと思ったが実際運用してみるとだめだった。クラスメソッドでWrapして使いましょう。よく見ると太字でだめと書かれている。

I strongly recommend avoiding delaying methods on instances. This stores object state in Redis which can get out of date, causing stale data problems.

ランタイム時に動的なQueue名を指定しない

それ用のライブラリが別途あるのでそれを使用。スタティックなQueue使いにくい。。ユーザ毎にキューを用意したい。。

https://stackoverflow.com/questions/20133346/how-can-i-create-sidekiq-queues-with-variable-names-at-runtime

Related Posts