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:執行參數。
步驟3:設定sidekiq.yml檔,寫入以下參數啟動Schedule,sidekiq.yml會在Sidekiq啟動時自動Load入,也可以不新增sidekiq.yml,而把參數寫到步驟2的scheduler.yml第1行進行宣告。
- 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
步驟4:於config/initializers/新增初始化引入,把scheduler.yml引入。
- :dynamic:true
./config/initializers/sidekiq_scheduler.rb
步驟5:Sidekiq-schedule能夠擴充Sidekiq Web,新增一個Recurring Jobs page,只需要再routes.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
- 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
沒有留言:
張貼留言