Shinjuku.rb #43 発表資料 https://shinjukurb.connpass.com/event/44524/
(株)永和システムマネジメント@mtsmfm松島 史秋resque-scheduler
View Slide
松島 史秋GitHub, Twitter@mtsmfm
ポケモン S/Mまっちまーフレコ1907-9185-9222
resque-scheduler
https://github.com/resque/resque-scheduler
大きく2つの機能
- Delay- Schedule
- Delay- 10分後に実行- Schedule- cron
resque単体だとできない
ActiveJob
http://edgeguides.rubyonrails.org/active_job_basics.html#enqueue-the-job
ActiveJob がやってくれたりしてないかな
Emoji provided free by Emoji One
https://github.com/mtsmfm/resque-scheduler-example
https://github.com/resque/resque-scheduler/blob/v4.3.0/lib/resque-scheduler.rb#L4
挙動が違う
https://github.com/jmettraux/rufus-scheduler/blob/master/lib/rufus-scheduler.rb
https://github.com/resque/resque-scheduler/blob/v4.3.0/lib/resque/scheduler/tasks.rb#L17-L18
https://github.com/resque/resque-scheduler/blob/v4.3.0/lib/resque/scheduler/cli.rb#L117
https://github.com/resque/resque-scheduler/blob/v4.3.0/lib/resque/scheduler.rb#L59-L70
https://github.com/resque/resque-scheduler/blob/v4.3.0/lib/resque/scheduler/locking.rb#L65-L67
Lock
https://github.com/resque/resque-scheduler/blob/v4.3.0/lib/resque/scheduler/locking.rb#L3-L50
- master プロセスが落ちたときに複数回enqueue されないための機構- Redis の SETNX を使っている- Delayed job は SETNX で単純な十分- Scheduled job (cron っぽい方) は頻繁にmaster が変わると、マシンの時間がずれている場合に厳しい- (デフォルトだと) 3 分ごとに lock をとる- 2 回走ってもいいときや時間の同期がきっちりされているなら短くするとよい
https://github.com/resque/resque-scheduler/blob/v4.3.0/lib/resque/scheduler.rb#L181-L190
Schedule jobは?
https://github.com/resque/resque-scheduler/blob/v4.3.0/lib/resque/scheduler/locking.rb#L28-L30
https://github.com/resque/resque-scheduler/blob/v4.3.0/lib/resque/scheduler.rb#L49-L53
https://github.com/resque/resque-scheduler/blob/v4.3.0/lib/resque/scheduler.rb#L89-L104
https://github.com/resque/resque-scheduler/blob/v4.3.0/lib/resque/scheduler.rb#L124-L163
学び
- 概要のわかるドキュメント大事- resque-scheduler は多重実行されるくらいなら jobが失われた方がいいという方針- Lock 機構難しい