Sidekiq - 防止工人在特定机器上执行

dav*_*ids 2 distributed ruby-on-rails sidekiq

我正在开发一个使用 Sidekiq 的 Rails 项目。我们的 Sidekiq 实现有两个 worker(WorkerA,读取 queue_a 和 WorkerB,读取 queue_b)。其中一个必须在 Rails 应用程序所在的同一服务器中执行,另一个必须在不同的服务器中执行。如何防止 WorkerB 在第一台服务器中执行,反之亦然?Sidekiq 进程可以配置为仅运行特定的工作人员吗?

编辑:Redis 服务器与 Rails 应用程序在同一台机器上。

Mik*_*ham 5

使用特定于主机名的队列。配置/sidekiq.yml:

---
:verbose: false
:concurrency: 25
:queues:
  - default
  - <%= `hostname`.strip %>
Run Code Online (Sandbox Code Playgroud)

在你的工人中:

class ImageUploadProcessor
  include Sidekiq::Worker
  sidekiq_options queue: `hostname`.strip

  def perform(filename)
    # process image
  end
end
Run Code Online (Sandbox Code Playgroud)

我的博客上有更多详细信息:

http://www.mikeperham.com/2013/11/13/advanced-sidekiq-host-specific-queues/