我知道我们可以做到:
sidekiq_options queue: "Foo"
但在这种情况下,它是仅分配给一个队列的Worker:“Foo”。
我需要在特定队列中分配一个Job(而不是Worker)。 使用Resque很容易:
Resque.enqueue_to(queue_name, my_job)
此外,对于并发问题,我需要将每个队列上的Worker数限制为1.
我该怎么做?
答案 0 :(得分:4)
您可以使用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答案 1 :(得分:1)
我做了fork gem并修改为使用动态队列,做了pull请求但是我正在等待merge。但在我的业务中,我使用我的宝石,如下所示。
https://github.com/dlanileonardo/sidekiq-limit_fetch
只将我的宝石放在Gemfile中:
gem 'sidekiq-limit_fetch', :git => 'https://github.com/dlanileonardo/sidekiq-limit_fetch.git'
(抱歉,我不会说英语)
如果我的拉取请求状态为Merged,则更新原始gem,将传递单元测试。
答案 2 :(得分:1)
我使用sidekiq limit fetch实现了上述功能。您可以将Sidekiq::Client.push
设置为true,并在process limit
并将attributes: {
createdAt: {
type: 'datetime',
columnName: 'cre_dt'
},
updatedAt: {
type: 'datetime',
columnName: 'upd_dt'
},
// your other columns
}
设置为特定队列。我们可以设置流程限制,也可以忽略,只需按照sidekiq默认限制进行处理