现在的位置: 首页 > 综合 > 正文

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

2017年12月07日 ⁄ 综合 ⁄ 共 1369字 ⁄ 字号 评论关闭

使用背景

        在平常工作中,出于性能考虑,很多工作或者任务可以放到后台悄悄咪咪地执行,而在接口层或者界面交互的地方,给用户快速返回。  
利用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

抱歉!评论已关闭.