安装
将sidekiq添加到Gemfile中
1
gem 'sidekiq', '~> 5.2', '>= 5.2.3'
执行 bundle install
配置
sidekiq 将执行任务的各种信息默认保存到 redis 中,所以需要配置redis客户端
- 在
config/initializers/sidekiq.rb中加入如下配置,如过不配置,默认使用localhost:6379的redis1
2
3
4
5
6
7Sidekiq.configure_server do |config|
config.redis = { url: 'redis://redis.example.com:7372/0' }
end
Sidekiq.configure_client do |config|
config.redis = { url: 'redis://redis.example.com:7372/0' }
end
编写后台任务
所有后台任务都写在app/workers文件夹下,可手动创建,也可以通过以下命令创建1
rails g sidekiq:worker <name>
创建好的任务文件格式如下1
2
3
4
5
6class HardWorker
include Sidekiq::Worker
def perform(name, count)
# do something
end
end
执行后台任务
在需要执行的地方像如下代码调用即可
1
2
3
4# 异步运行
HardWorker.perform_async('bob', 5)
# 5 分钟后运行
HardWorker.perform_in(5.minutes, 'bob', 5)启动sidekiq进行
1
bundle exec sidekiq
sidekiq 和 raile 以及 redis 都要启动,仅启动其中一个是无法执行后台任务的
sidekiq 配置文件
默认sidekiq 读取config/sidekiq.yaml这个配置文件,如果配置文件不是这个可在启动sidekiq时通过-C指定配置文件,像这样:1
bundle exec sidekiq -C config/myapp_sidekiq.yml
配置文件也可以没有,这个不会影响任务的执行,但如果想要定制sidekiq的一些行为,就需要配置了
配置详细信息可参考 https://github.com/mperham/sidekiq/wiki/Advanced-Options
sidekiq web ui 界面
sidekiq 自带一个web 管理界面,可通过下面方式开启
在
config/routes.rb中加入如下内容1
2require 'sidekiq/web'
mount Sidekiq::Web => '/sidekiq'访问
http://localhost:port/sidekiq即可
sidekiq 定时任务
在上面的基础上继续做如下事情
添加一个gem包到Gemfile中
1
gem 'sidekiq-cron', '~> 1.0', '>= 1.0.4'
编写worker任务,跟sidekiq是一样的
通过下面的任一方法,将定时任务添加到sidekiq中
1
2job = Sidekiq::Cron::Job.create(name: 'Hard worker - every 5min', cron: '*/5 * * * *', class: 'HardWorker')
job.save
1 | hash = { |
1 | array = [ |
相同的任务多次创建时,只会创建一个
- 开启 web ui 界面
在config/routes.rb 中加入如下内容1
2
3require 'sidekiq/web'
require 'sidekiq/cron/web'
mount Sidekiq::Web => '/sidekiq'
同样访问http://localhost:port/sidekiq 即可