【问题标题】:Sidekiq: How to assign process to a worker?Sidekiq:如何将进程分配给工作人员?
【发布时间】:2015-12-07 14:51:34
【问题描述】:

我在 Sidekiq 中遇到了多个工人和多个 Sidekiq 进程的问题。

我想为一个环境运行三个 sidekiq 进程。

我有三个工人类(可以说 “worker1”、“worker2”和“worker3”)和三个 sidekiq 进程(可以说 “process1”、“process2”和“进程3”)。

在我当前的结构中,工作人员正在任何可用的进程上运行。但我想要的是 worker1 应该在 process1 上运行,而 worker2 应该在 process2 上运行等等。

我对实现它有点困惑,如果我知道如何将工作人员设置为特定的 sidekiq 进程,我会很高兴。

Sidekiq 进程是:

process1: bundle exec sidekiq -q default
process2: bundle exec sidekiq -C config/myapp_sidekiq.yml
process3: bundle exec sidekiq -q process3

提前谢谢...

【问题讨论】:

  • 您问的是关于队列的问题吗? github.com/mperham/sidekiq/wiki/Advanced-Options#queues
  • 嗨,克里希纳,这与队列无关。我正在运行多个队列。它关于 Sidekiq 进程(就像我想运行 3 个 sidekiq 进程,每个进程都应该指向一个工人)

标签: ruby-on-rails-4 backgroundworker background-process sidekiq


【解决方案1】:

您分配进程以从队列中提取作业。您分配工人进入队列。

process1: bundle exec sidekiq -q queue1

class Worker1
  sidekiq_options queue: 'queue1'
end

# will only be processed by process1
Worker1.perform_async

【讨论】:

  • 我有一个进程的动态队列。所以,不可能像你提到的那样为工人设置一个队列。
  • 我使用Sidekiq::Client.push 将进程排队。 Sidekiq::Client.push('queue' => account_name_as_queue_name, 'class' => MyWorker, 'args' => [ raw_event.account_id ])。在那,我可以指定 Sidekiq 的进程名称,如Sidekiq::Client.push('process' => 'process1', 'queue' => raw_event.account_id, 'class' => EventProcessingWorker, 'args' => [ raw_event.account_id ]) 以将工作人员映射到 Sidekiq 进程。
猜你喜欢
  • 2015-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-10
  • 2018-11-05
  • 2019-12-25
  • 2013-02-02
  • 1970-01-01
相关资源
最近更新 更多