搜索
您的当前位置:首页正文

ruby activejob 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_id

Top