Sidekiq和单个队列的并发性

3

我有3个任务队列在运行

User
Follower
Default

用户可以导入自己的数据,然后由“用户队列”完成。这实际上会创建大量的追随者(多达数百万),每个追随者都有一个after_create来更新自己,在“追随者队列”中。

问题在于,50个用户现在可以创建他们的导入,但我希望同时只有1个导入被执行。按先进先出的顺序进行操作,而“追随者队列”应该仍然使用100个并发工作线程。 例如:一个用户导入500,000个追随者。然后下一个用户导入5百万。下一个导入400。与此同时,加载用户1的追随者。

是否可能做到?

我的YAML文件如下:

:queues:
  - user
  - follower
  - default

文档现在告诉我,用户队列是高优先级的。但如何确定同时只完成一个来自该队列的作业?

1个回答

5

这个功能不被Sidekiq核心支持,(作者也不想添加此功能)。然而,有一个外部中间件似乎支持每个队列设置工作器限制,sidekiq-limit_fetch gem。使用它,您应该可以轻松地设置所需内容:

# sidekiq.yml
:limits:
  user: 1
  follower: 100
  default: 10 # or whatever you like

宝石代码有点老,结果可能会有所不同...

甜的。我已经看到了,但是又点开了其他页面。我会试一试的 :-) - Tim Kretschmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接