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 代码有点旧,但你的里程可能会有所不同...