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