Sidekiq与单队列并发
Sidekiq and concurrency of a single queue
我有 3 个队列 运行
User
Follower
Default
用户可以导入他的数据,然后由 User
队列完成。
这实际上创造了大量的追随者(高达数百万),他们每个人都有一个 after_create 来更新自己,在 Follower
队列中。
这里的问题是,50 个用户现在可以创建他们的导入,但我只想同时完成 1 个导入。先进先出 - 而 Follower-Queue
应该仍然与 100 个同时工作的工人一起工作。
示例:1 个用户导入 500.000 个关注者。那么下一个用户导入500万。接下来导入 400。同时加载用户 1 的关注者。
可以吗?
我的 YAML 看起来像这样
:queues:
- user
- follower
- default
文档现在告诉我,用户队列具有高优先级。但是如何判断此队列中只有 1 个作业同时完成?
此功能sidekiq 核心(以及作者does not want to add such feature to it). However, there is an external middleware that seems to support setting worker limits per queue, the sidekiq-limit_fetch
gem)不支持此功能。使用它您应该能够轻松地设置您想要的内容需要:
# sidekiq.yml
:limits:
user: 1
follower: 100
default: 10 # or whatever you like
虽然 gem 代码有点旧,但你的里程可能会有所不同...
我有 3 个队列 运行
User
Follower
Default
用户可以导入他的数据,然后由 User
队列完成。
这实际上创造了大量的追随者(高达数百万),他们每个人都有一个 after_create 来更新自己,在 Follower
队列中。
这里的问题是,50 个用户现在可以创建他们的导入,但我只想同时完成 1 个导入。先进先出 - 而 Follower-Queue
应该仍然与 100 个同时工作的工人一起工作。
示例:1 个用户导入 500.000 个关注者。那么下一个用户导入500万。接下来导入 400。同时加载用户 1 的关注者。
可以吗?
我的 YAML 看起来像这样
:queues:
- user
- follower
- default
文档现在告诉我,用户队列具有高优先级。但是如何判断此队列中只有 1 个作业同时完成?
此功能sidekiq 核心(以及作者does not want to add such feature to it). However, there is an external middleware that seems to support setting worker limits per queue, the sidekiq-limit_fetch
gem)不支持此功能。使用它您应该能够轻松地设置您想要的内容需要:
# sidekiq.yml
:limits:
user: 1
follower: 100
default: 10 # or whatever you like
虽然 gem 代码有点旧,但你的里程可能会有所不同...