美文网首页ruby on rails
rails中的sidekiq与sidetiq(基于redis)

rails中的sidekiq与sidetiq(基于redis)

作者: 夏_至 | 来源:发表于2015-09-20 17:54 被阅读2204次

    1.sidekiq
    首先说说sidekiq,sidekiq是异步处理任务比较方便的一个工具,让我们一步步去安装并使用它
    由于是基于redis,我们首先得安装一下redis,在Ubuntu或者Mac下都比较容易,分别用

    sudo apt-get install redis-server
    brew install redis

    unbuntu下面安装好了是自启动,而mac则需要手动找到安装目录去运行一下bin目录下的redis-server
    如图是Mac下启动的redis

    redis-server

    下一步安装sidekiq,在Gemfile里加上

    gem 'sidekiq'

    bundle以后在项目app文件夹下新建workers文件夹,比如我是要实现发邮件的功能,那么新建一个mail_worker.rb代码如下

    class MailWorker
    include Sidekiq::Worker
    def perform(subject,body,receiver,send_at=Time.now)
    m = Mailer.notice_mail subject,body,receiver,send_at
    m.deliver
    end
    end

    这样等于是建立好了一个监听程序,等待事件触发,不过程序还没跑起来,需要运行起来这个监听 bundle exec sidekiq ,需要注意的是,不管是开发模式还是产品模式,运行了sidekiq过后再取改worker里的代码都是不会即时生效的,都需重新跑一下sidekiq

    sidekiq

    服务跑起来以后,可以在console里去执行了:

    MailWorker.perform_async 'subject','body','test@rccchina.com'

    一些常用的方法在github上看一下API或者直接看源代码lib/sidekiq/worker.rb
    值得注意的是,传递参数的时候尽量要传递对象,因为很多对象sidekiq不识别……
    2.sidetiq 定时器
    跟sidekiq像兄弟一样的关系,用于定时执行例如每天中午12点干嘛干嘛,或者每隔1个小时干嘛干嘛……使用起来也比较方便

    gem 'sidetiq'

    同样也是在workers目录下创建一个文件,例如我想每天晚上12点整执行脚本:
    daily_worker.rb

    class DailyWorker
    include Sidekiq::Worker
    include Sidetiq::Schedulable
    recurrence do
    # 每晚12点
    daily
    end
    def perform
    #do something
    Mailer.send_mail_to_admin
    end

    就这么简单,写完以后重启一下sidekiq,bundle exec sidekiq ,重启以后可以看到log下面多了一行:
    2015-09-20T09:00:00.891Z 8069 TID-ovhgqdoao INFO: [Sidetiq] Enqueue: DailyWorker (at: 1442740500.0) (last: -1.0)
    则说明已经生效了。
    而控制执行时间的在recurrence
    例如每隔15分钟运行一次:minutely(15)
    每个小时的0,15,30,45分都执行:hourly.minute_of_hour(0, 15, 30, 45)

    recurrence do
    #表示每三年的3-1和每隔两年的2-1都会执行
    yearly(3).month_of_year(:march)
    yearly(2).month_of_year(:february)
    end

    参见
    https://github.com/mperham/sidekiq/wiki/Getting-Started
    https://github.com/tobiassvn/sidetiq/wiki/Basic-Usage
    https://github.com/tobiassvn/sidetiq/wiki/Known-Issues

    相关文章

      网友评论

        本文标题:rails中的sidekiq与sidetiq(基于redis)

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