【问题标题】:How to process queue sequentially in Redis and SideKiq in Rails?如何在 Rails 中的 Redis 和 SideKiq 中按顺序处理队列?
【发布时间】:2016-08-27 00:21:12
【问题描述】:

我在我的应用程序中使用 Rails 4,这就是我创建新工作的方式:

class FetchJob < ActiveJob::Base
  queue_as :fetchjob
  def perform num
    puts num
    sleep 30
  end
end

此代码打印出num 的值,然后休眠 30 秒。我正在使用 sidekiq gem 和 redis 来处理这个队列。创建用户后,我正在排队作业。

class FecthJobController < ApplicationController
  def create
    @user = User.create(user_params)
    FetchJob.perform_later(@user.id)
  end

  private
  def user_params
    ....
  end
end

队列中的作业正在并行执行。队列中的作业是指 job1、job2、job3、job4 等。那么我怎么可能按顺序执行这些作业。即只有当job1完成时,它才会处理job2,然后是job3,依此类推。在sidekiq完成作业之前如何锁定它?

【问题讨论】:

  • 使用专用队列并分配 1 个工作人员来处理该队列。

标签: ruby-on-rails ruby redis sidekiq sidekiq-superworker


【解决方案1】:

您可能会发现一个 hack 可以让您做您想做的事,但让我提出其他建议:您使用了错误的工具。 Sidekiq 并非旨在以这种方式运行。

https://github.com/mperham/sidekiq/wiki/Best-Practices#3-embrace-concurrency

【讨论】:

    猜你喜欢
    • 2017-09-30
    • 2013-05-26
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 2012-05-06
    相关资源
    最近更新 更多