【问题标题】:How to push job in specific queue and limit number workers with sidekiq?如何使用sidekiq在特定队列中推送工作并限制工人数量?
【发布时间】:2015-09-25 15:21:35
【问题描述】:

我知道我们可以做到:

sidekiq_options queue: "Foo"

但在这种情况下,仅分配给一个队列的是 Worker:“Foo”。

我需要在特定队列中分配一个 Job(而不是 Worker)。 使用 Resque 很容易:

Resque.enqueue_to(queue_name, my_job)

此外,对于并发问题,我需要将每个队列上的 Worker 数量限制为 1。

我该怎么做?

【问题讨论】:

    标签: ruby resque jobs sidekiq worker


    【解决方案1】:

    你可以使用https://github.com/brainopia/sidekiq-limit_fetch

    然后:

    Sidekiq::Client.push({
        'class' => GuidePdfWorker,
        'queue' => queue_name,
        'args'  => [my_job]
    })
    Sidekiq::Queue[queue_name].limit = 1
    

    但你必须在 config/sidekiq.yml 中声明你的 queue_name

    【讨论】:

    • 是的,这是一件好事,但我需要动态队列名称,所以如果我必须在文件中定义它们,这不是一个好的解决方案。例子:如果我有游戏,工作就属于游戏。我想创建像“game_” + game_id 这样的动态队列名称,并将作业推送到一个好的队列中。你不明白吗?我该怎么做?
    • 我问过同样的事情 :) stackoverflow.com/questions/20133346/…
    • 是的,我知道,但是 sidekiq-limit-fetch 和 sidekiq-dynamic-queues 是不兼容的插件!我需要两者,但我不能:'(有什么想法吗?
    【解决方案2】:

    我已经使用 sidekiq 限制获取实现了上述功能。您可以将dynamic queue mode 设置为true,并在Sidekiq::Client.push 中指定队列

    并将process limit 设置为特定队列。我们可以设置进程限制,也可以忽略它并按照sidekiq默认限制进行处理

    【讨论】:

      猜你喜欢
      • 2013-03-23
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多