Active Job是 为多种队列后端(Sidekiq、Resque、Delayed Job,等等)内置了适配器。最新的适配器列表参见 ActiveJob::QueueAdapters
的 API 文档。
Sidekiq 是为 Ruby 打造的一个全功能后台处理框架,可以很方便地集成到大部分 Rails 程序中。
sidekiq github:https://github.com/mperham/sidekiq
准备工作
异步处理的数据放在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
注意点
在使用sidekiq的时候,可能会使用after_save,after_commit的回调方法,这时候,一定要进行限制,比如限制它只有在增加或者进行修改的时候使用,详情请看:
https://redpanthers.co/after_create-vs-after_save-vs-after_commit/
如何删除sidekiq_id
https://gist.github.com/eparreno/9f82d6012e6585a9346b
更多activejob的只是请参照rails guides:http://guides.rubyonrails.org/active_job_basics.html
网友评论