美文网首页程序员
ruby activejob sidekiq

ruby activejob sidekiq

作者: 程序员小哥哥 | 来源:发表于2018-06-13 20:32 被阅读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

    相关文章

      网友评论

        本文标题:ruby activejob sidekiq

        本文链接:https://www.haomeiwen.com/subject/zadseftx.html