【问题标题】:Run Delayed Jobs and Sidekiq at the same time同时运行延迟作业和 Sidekiq
【发布时间】:2012-10-29 15:55:04
【问题描述】:

我目前使用延迟作业来异步处理作业。我没有创建工人,而是经常使用.delay 方法。

我想搬到 Sidekiq,但我有太多类型的工作,无法确保所有工作都是线程安全的。所以我想并行运行 Delayed Job 和 Sidekiq,一次迁移一种类型的作业。

既然 Delayed Job 和 Sidekiq 都提供.delay 方法,我该如何区分两者?还有其他潜在问题吗?

【问题讨论】:

    标签: ruby ruby-on-rails-3 delayed-job sidekiq


    【解决方案1】:

    对于 Sidekiq 2.17.1 及更高版本,在 Rails 初始化程序的某处,调用以下代码:

    Sidekiq.hook_rails!
    Sidekiq.remove_delay!
    

    你将只有 sidekiq_delay 方法等前缀。

    (official document)


    对于旧版本的 Sidekiq:

    将以下内容放入config/initializers/sidekiq.rb

    module Sidekiq::Extensions::Klass
      alias :sidekiq_delay :delay
      remove_method :delay
      alias :sidekiq_delay_for :delay_for
      remove_method :delay_for
      alias :sidekiq_delay_until :delay_until
      remove_method :delay_until
    end
    
    module Sidekiq::Extensions::ActiveRecord
      alias :sidekiq_delay :delay
      remove_method :delay
      alias :sidekiq_delay_for :delay_for
      remove_method :delay_for
      alias :sidekiq_delay_until :delay_until
      remove_method :delay_until
    end
    
    module Sidekiq::Extensions::ActionMailer
      alias :sidekiq_delay :delay
      remove_method :delay
      alias :sidekiq_delay_for :delay_for
      remove_method :delay_for
      alias :sidekiq_delay_until :delay_until
      remove_method :delay_until
    end
    

    然后您可以使用sidekiq_delay 在 Sidekiq 中排队,并调用delay 在延迟作业中排队。

    【讨论】:

    • 谢谢,真的很有帮助:)
    【解决方案2】:

    对于任何搜索此内容的人。我确实发现 Sidekiq 现在有一个开箱即用的设置。所有你 需要做的是将Sidekiq.remove_delay!添加到config/initializers/sidekiq.rb

    这里对此进行了描述: https://github.com/mperham/sidekiq/wiki/Delayed-Extensions

    【讨论】:

      【解决方案3】:

      似乎 Sidekiq 有 mix-in 将 .delay 方法添加到所有类。不能 100% 确定这将如何表现,但如果您所指的 delay 位于实例级别,则可能会导致问题。

      我的建议是为每个作业添加 sidekiq 库,直到您将所有作业移至其中。意思是避免同时包含两个库,如果可能的话。

      【讨论】:

        猜你喜欢
        • 2017-12-15
        • 1970-01-01
        • 2017-04-26
        • 1970-01-01
        • 1970-01-01
        • 2012-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多