Ruby on rails 或 Ruby Goliath 利用redis + sidekiq 实现异步处理机制

使用背景

        在平常工作中,出于性能考虑,很多工作或者任务可以放到后台悄悄咪咪地执行,而在接口层或者界面交互的地方,给用户快速返回。  
利用Redis + Sidekiq的组合方式,能够在Ruby on Rails web框架或者Ruby Goliath框架上面,简单实现任务的异步处理。
       下面介绍使用方式

1、安装Redis
      Redis,作为内存数据库,是Sidekiq任务运行的容器,Sidekiq的异步任务都是从Redis内存数据库里面进行抓取。Redis的安装及使用方式,不同的平台,windows/linux/mac os 请参见Redis的相关文件,在此不做介绍。

2、安装Sikekiq Gem包
      在Rails 或者 Goliath的Gemfile里面  加上sidekiq的gem包,并执行bundle install
        gem 'sidekiq'

3、增加sidekiq配置文件

增加config/sidekiq.yml文件,其中内容格式如下
---                                                                                                                    
:logfile: ./log/sidekiq.log
:verbose: false
:concurrency: 20
:queues:
  - [aysnc_worker, 5]

4、按固定方式实现异步处理类

         以Rails工程为例,在app目录下面,创建一个worker目录,然后新建包含异步处理类的ruby原文件,如asyn_worker.rb,代码如下
<span style="font-size:14px;"><span style="font-size:18px;">class AsyncWorker  
  include Sidekiq::Worker  
  
  def perform(A)  
     logger.info "Async worker here we go"
  end  
end</span></span>

5、启动异步任务
bundle exec sidekiq  -C config/sidekiq.yml -d -e production

6、调用异步处理类方法

        在需要实现异步处理的地方,按如下方式调用SyncWorker的类方法即可
         AsyncWorker.perform_async(A)
        就这样简单,就实现了任务的异步处理

7、Rails实现sidekiq的任务监控功能

a) 增加两个gem包,并bundle install 
gem 'sinatra', require: false  
gem 'slim'</span>

b)  修改路由配置文件config/routes.rb,增加如下配置
<require 'sidekiq/web'                                                                                                        
Yourweb::Application.routes.draw do
  mount Sidekiq::Web, at: "/sidekiq" 
end</span>

c) 访问你的网站 http://yourweb.com/sidekiq  查看sidekiq的web监控界面,显示结果如下


       至此,大功告成,希望对各位看官有所收获。
       by the way,如果大家需要对不同的任务,在sidekiq里面设置不同的优先级,并根据任务的不同进行分类调用。
       可以参考dongdongk的一篇原创博客,地址: http://blog.csdn.net/dongdongk/article/details/38517937
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值