基础知识
sidekiq是一种后台作业处理的框架,它可以在后台执行工作,以扩展你的应用程序,这需要三个部分:
1.Client
Sidekiq client在你的web应用程序中运行,允许你把作业放在后台进行处理。在应用的代码中,有三种方式可以创建一个Job:
MyWorker.perform_async(1, 2, 3)
SomeClass.delay.some_class_method(1, 2, 3) # See Delayed Extensions wiki page
Sidekiq::Client.push('class' => MyWorker, 'args' => [1, 2, 3]) # Lower-level generic API
Sidekiq::Client.push('class' => 'MyWorker', 'args' => [1, 2, 3]) # Can also pass class as a string.
这三种方式都是创建一个Hash用于表示某个人物,然后将Hash转换成JSON字符串,并将这个字符串添加到Rails的一个队列中。这以为这worker的参数必须是简单的JSON数据类型(numbers, strings, boolean, array, hash)。复杂的Ruby对象(比如日期,事件,ActiveRecord实例)不会被正确的转换。
2.Redis
Redis为sidekiq提供数据存储,It holds all the job data along with runtime and historical data to power Sidekiq’s Web UI.
3.Server
每个sidekiq服务进程从Redis的队列中获取并处理任务。就像你的web进程一样,sidekiq引导Rails,所以你的任务和workers可以使用所有的Rails API,包括ActiveRecord。Server将会实例化你的worker,并且传递参数给worker。Everything else is up to your code.