如何在特定队列中推送工作并使用sidekiq限制数字工作者?

我知道我们可以这样做:

sidekiq_options queue: "Foo" 

但在这种情况下,它只是一个队列中的Worker:“Foo”。

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

 Resque.enqueue_to(queue_name, my_job) 

此外,对于并发问题,我需要将每个队列上的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

我做了分叉gem并修改为使用动态队列,做了拉请求,但我正在等待合并。 但在我的业务中,我使用我的gem,如下所示。

https://github.com/dlanileonardo/sidekiq-limit_fetch

只把我的gem放在Gemfile中:

 gem 'sidekiq-limit_fetch', :git => 'https://github.com/dlanileonardo/sidekiq-limit_fetch.git' 

(抱歉,我不会说英语)

如果我的拉取请求状态为Merged,则更新原始gem,然后传递unit testing。

https://github.com/brainopia/sidekiq-limit_fetch/pull/46

我已经使用sidekiq limit fetch实现了上述function。 您可以将dynamic queue mode设置为true,并在Sidekiq::Client.push指定队列

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