准备工作
异步处理的数据放在redis里面,所以需要安装redis
如果用的是mac的话,可以用brew install redis
安装
在gemfile中添加
gem 'sidekiq'
使用
比如我要创建个NoticeJob,在app/jobs创建notices_job.rb。
class NoticeJob < ApplicationJob
queue_as :default
before_enqueue do |job|
# 对作业实例做些事情
end
around_perform do |job, block|
# 在执行之前做些事情
block.call
# 在执行之后做些事情
end
def perform
# 稍后做些事情
end
end
这里存在一个application_job.rb
class ApplicationJob < ActiveJob::Base
end
作业设定
可以根据实际需要设定执行时间
# 入队作业,作业在队列系统空闲时立即执行
GuestsCleanupJob.perform_later guest
# 入队作业,在明天中午执行
GuestsCleanupJob.set(wait_until: Date.tomorrow.noon).perform_later(guest)
# 入队作业,在一周以后执行
GuestsCleanupJob.set(wait: 1.week).perform_later(guest)
# `perform_now` 和 `perform_later` 会在幕后调用 `perform`
# 因此可以传入任意个参数
GuestsCleanupJob.perform_later(guest1, guest2, filter: 'some_filter')
邮件发送
# 如需想现在发送电子邮件,使用 #deliver_now
UserMailer.welcome(@user).deliver_now
# 如果想通过 Active Job 发送电子邮件,使用 #deliver_later
UserMailer.welcome(@user).deliver_later
启动sidekiq
服务器启动sidekiq:
可以用cat Procfile
来获取sidekiq启动命令
bundle exec sidekiq -C config/sidekiq.yml -d
本地启动,直接在命令行输入sidekiq
即可。
查看队列数量、启动队列数量命令
1.在sidekiq console如果想要输出打印信息,可以在代码中puts即可
2.查看队列数量和清空队列数量,在rails console里运行:
Sidekiq::Queue.new(:default).count
Sidekiq::Queue.new(:default).clear
Sidekiq::Queue.new(:critical).count