浩文 联系 关于本站 登录 注册
  • 关注新浪微博:
  • 关注微信公众号:

Sidekiq Github wiki 中文文档

兼容Resque

commit信息:Updated Resque Compatibility (markdown) | 提交者:mperham | 提交时间:2019-02-20 | 版本:bd0881b

我尝试在适当的情况下使Sidekiq与Resque兼容;这让那些正在使用Resque的用户可以轻松的试用Sidekiq。

为了确保线程安全,Sidekiq需要一个稍微不同的worker API。 Resque assumes the perform method is a class method, 这在多线程环境中是非常危险的(例如,类实例变量将成为全局变量)。

resque:

class MyWorker
  def self.perform(name, count)
    # do something
  end
end

sidekiq:

class MyWorker
  include Sidekiq::Worker
  def perform(name, count)
    # do something
  end
end

没有大的变化,但是,写workers变得更简单、更直观。

客户端API

Sidekiq有完全相同的API来将作业推送到队列,因此你只需在项目中搜索和替换它:

resque:

Resque.enqueue(MyWorker, 'bob', 1)

sidekiq:

Sidekiq::Client.enqueue(MyWorker, 'bob', 1)
# equivalent to:
MyWorker.perform_async('bob', 1)

Sidekiq::Client为了兼容resque-scheduler,它也有一个enqueue_in

性能

resque和delay_job使用相同的低效单线程的程序设计。 Sidekiq通常比它们快一个数量级。

功能性

Sidekiq提供了比Resque更多的开箱即用的功能。 例如,Sidekiq在其gem中包含了resque-scheduler,resque-web,resque_mailer和resque-retry中的大多数功能,几乎不需要你进行任何自定义配置。

插件

Sidekiq不支持Resque的callback-based类插件。它提供了 中间件 API 来注册你的钩子代码以在作业执行期间执行该代码。

局限

使用resque客户端API排队的作业在有效负载中没有诸如retry之类的参数。这意味着,如果作业失败了,它们将不能被自动重试。请把你的代码迁移到使用Sidekiq API,这样可以自动具备该功能,以及其它的依赖此类参数的功能。

Redis

如果你的Resque程序使用命名空间,请确保配置Sidekiq使用相同的命名空间。添加下面代码到你的 sidekiq.rb文件的初始化程序中。

# Add gem 'redis-namespace' to your Gemfile too
Sidekiq.configure_client do |config|
  config.redis = { namespace: 'resque' }
end
Sidekiq.configure_server do |config|
  config.redis = { namespace: 'resque' }
end

上一篇: 中间件 下一篇: 日志记录