ruby-on-rails - 如何在 Rails 中的 Redis 和 SideKiq 中顺序处理队列?

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

我在我的应用程序中使用 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中锁定它直到作业完成?

最佳答案

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

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

关于ruby-on-rails - 如何在 Rails 中的 Redis 和 SideKiq 中顺序处理队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36978993/

相关文章:

ruby-on-rails - Ruby stripe api 不触发事件

ruby-on-rails - 如何通过 rails-assets 安装 Modernizr 3?

ruby-on-rails - 数值验证不接受 0 作为数字

ruby - 从 Linux 终端将双引号传递到 ruby​​ 脚本有时会导致\",有时在 ARGV 中什么也没有被拾取

get - memtier 基准测试了解输出

Redis-Sentinel 在每个节点上都使用 slaveof

ruby-on-rails - 是否需要“bundler/setup”与运行 Bundler.setup 相同?

ruby - Sinatra Web 管理员(如 Django 管理员)

ruby - 嵌套异常中的回溯

java - 在Spring Boot App中使用Redis Stream通过HTTP长轮询来阻止HTTP响应