rails sidekiqでバックグラウンドジョブ管理②
railsのバックグラウンドジョブ実行をsidekiqで実現する第2回。
本日はWorkerを作成する所からです。
本家では
Add a worker in app/workers to process messages asynchronously:
といっておりますので、 とりあえずappフォルダ以下にworkersという階層を作ります。
そして同階層にhogeWorker.rbを適当に作って(本家より引用)、
class HardWorker
include Sidekiq::Worker
def perform(name, count)
# do something
end
end
といった形でクラスを作ります。
do something
にやらせたい処理を書いて下さい。
putsは実行するとsidekiqコンソールに表示されるので、 実際に動いているか確認する事が可能です。
で、ここまで整えば、後は呼ぶだけです。
$rails c
>HardWorker.perform_async
と実行すると、sidekiqが動いてくれます。 perform_asyncを呼ぶとperform内で定義した処理を、 ジョブ実行する感じです。
Workerは4種類のオプションをもっています(また本家引用)
class HardWorker
include Sidekiq::Worker
sidekiq_options :queue => :crawler, :timeout => 60, :retry => false, :backtrace => true
def perform(name, count)
end
end
:queue は実行時のキューを指定できます。defaultは'default'です。 :timeout はキューでの待ち時間です。defaultはnil。動作的には無制限っぽいです。 :retry はジョブ失敗時にリトライするかどうかです。defaultはtrue。 :backtrace はエラー時のバックトレースを表示するかどうかっぽいです。
次は実際に蹴ってみてWEBUIで確認してみるところを。