sidekiq-schedule實作
實作前確認已經安裝sidekiq gem,並且實作完成。步驟1:安裝sidekiq-schedule,在Gamfile中新增以下指令後,執行bundle install
gem 'sidekiq-scheduler', '2.0.0'
步驟2:在confit目錄下建立排程設定YAML檔,本實作為config/scheduler.yml
- test_job:Job名稱,可以自己變更
- cron:時間排程,一般以5個*來做定義,由左至右分別為:分 時 日 月 週
- 若要定義為每天晚上的10:30分執行,則設定為cron: “30 22 * * *”
- 若要指定為每週一凌晨3:00分執行,則設定為cron: “0 3 * * 1”
- 關於cron更詳細的設定,可以參考Cron Wiki
- 可以使用every來取代cron,例如每30秒執行一次,則可以使用every: 30s
- class:要執行的Class,在2.0.2以上版本開始支援ActiveJob的關係,所以可以直接在class指定Job Class,但是因為使用的2.0.0並未支援ActiveJob的關係,所以需要詳細指定類別的路徑。
- wrapped:要執行的Class,在2.0.2以上版本不需要此參數。
- job_class:要執行的Class,在2.0.2以上版本不需要此參數。
- arguments:執行參數。
test_job: cron: "0 23 * * *" class: ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper wrapped: SidekiqTestJob args: - job_class: SidekiqTestJob # job_id: job_id, # queue_name: queue_name, # priority: priority, arguments: ["533fa9ab-57e2-4c96-9b36-3f9c45ba317a", "Test Notification!"] # locale: I18n.locale步驟3:設定sidekiq.yml檔,寫入以下參數啟動Schedule,sidekiq.yml會在Sidekiq啟動時自動Load入,也可以不新增sidekiq.yml,而把參數寫到步驟2的scheduler.yml第1行進行宣告。
:dynamic:true步驟4:於config/initializers/新增初始化引入,把scheduler.yml引入。
./config/initializers/sidekiq_scheduler.rb
require 'sidekiq/scheduler' Dir[File.expand_path('../lib/workers/*.rb',__FILE__)].each do |file| load file; end Sidekiq.configure_server do |config| config.on(:startup) do Sidekiq.schedule = YAML.load_file(File.expand_path("../../../config/scheduler.yml",__FILE__)) end end步驟5:Sidekiq-schedule能夠擴充Sidekiq Web,新增一個Recurring Jobs page,只需要再routes.rb新增
require 'sidekiq/web' require 'sidekiq-scheduler/web' mount Sidekiq::Web => '/sidekiq'
Console Command
可以登入Rails Console,操作排程
變更排程
Sidekiq.set_schedule('sidekiq_test_job', { 'every' => ['1m'], 'class' => 'ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper', 'args' => [ { "job_class"=>"SidekiqTestJob", "arguments" => ["Test Job", "1", "2"] }]})
移除排程
2.2.0 :002 > Sidekiq.remove_schedule 'sidekiq_test_job' => true
沒有留言:
張貼留言