Rails 个职位和 Sidekiq

Rails jobs and Sidekiq

我刚刚在我的应用程序上安装了 redis 和 sidekiq,

我有一项工作是在需要时更新用户 table 的字段,

以及每周向所有用户发送一封电子邮件的作业。

现在,如果我使用 bundle exec sidekiq 启动 sidekiq,更新用户字段的作业将触发并完成,但电子邮件作业仍保留在排队部分中。

但是,如果我使用从 Sidekiq github 页面获得的 bundle exec sidekiq -q workers -q mailers 启动它,只有邮件作业完成,而其他作业留在排队部分。

是否有命令能够 运行 两者?我昨天才开始学习 sidekiq 和 redis 很抱歉,如果这是一个愚蠢的问题,

我在 application.rb 中将 activejob.que_adaptar 设置为 sidekiq

这就是我为用户作业设置 sidekiq worker 的方式:

class DeactivateUser
 include Sidekiq::Worker

  def perform
   User.active.update_all(active: false)
  end

end

谢谢。

使用您的队列列表和 运行 sidekiq -C config/sidekiq.yml 创建 config/sidekiq.yml

    #config/sidekiq.yml

    ---
    :concurrency: 5
    :queues:
      - default
      - mailers
      - orders

按照 Oskar 的配置,遵循相同的方法让单个 sidekiq 进程处理多个队列。此外,您还必须在工作文件中提及队列名称。这样 sidekiq 进程将从该队列的 redis 中获取作业。例如:( sidekiq_options queue: :mailers )

class WORKER_NAME
  include Sidekiq::Worker
  sidekiq_options queue: :<queue_name>

   def perform
     ... # your work
   end
end

如果你想启动进程只监听一个队列邮件程序并有 10 个并发,请这样启动。

bundle exec sidekiq -c 10 -C config/myapp_sidekiq.yml -q mailers -q queue1 -q queue2

这将监听总共 3 个名为 mailersqueue1queue2 的队列。这就是您必须启动 sidekiq 的方式。更多文档请refer to this.