程序员

ruby activejob sidekiq

2018-06-13  本文已影响5人  程序员小哥哥

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即可。

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

上一篇 下一篇

猜你喜欢

热点阅读