Sidekiq和单个队列的并发

Tim*_*mer 3 ruby-on-rails sidekiq ruby-on-rails-4

我有 3 个队列正在运行

User
Follower
Default
Run Code Online (Sandbox Code Playgroud)

用户可以导入他的数据,然后由User队列完成。这实际上创建了大量的关注者(多达数百万),并且每个人都有一个 after_create 来在队列中更新自己Follower

这里的问题是,50 个用户现在可以创建他们的导入,但我只想同时完成 1 个导入。先进先出 - 而Follower-Queue应该仍然与 100 名工人同时工作。示例:1 个用户导入 500.000 个关注者。那么下一个用户导入500万。接下来导入 400。同时加载用户 1 的关注者。

有可能吗?

我的 YAML 看起来像这样

:queues:
  - user
  - follower
  - default
Run Code Online (Sandbox Code Playgroud)

文档现在告诉我,用户队列的优先级很高。但如何判断该队列中只有 1 个作业同时完成?

Bor*_*aMa 5

sidekiq 核心不支持此功能(并且作者不想向其添加此类功能)。然而,有一个外部中间件似乎支持设置每个队列的工作限制,即sidekiq-limit_fetchgem。使用它您应该能够轻松设置您需要的内容:

# sidekiq.yml
:limits:
  user: 1
  follower: 100
  default: 10 # or whatever you like
Run Code Online (Sandbox Code Playgroud)

不过,宝石代码有点旧,您的里程可能会有所不同......