节流阀Sidekiq在rails中的工作。

问题描述 投票:0回答:1

我需要对我的Sidekiq作业进行节流,这样我就不会出现这种故障。

2020-04-23T12:36:24.424Z pid=1 tid=osrlydn8x WARN: ActiveJob::DeserializationError: Error while trying to deserialize arguments: could not obtain a connection from the pool within 5.000 seconds (waited 5.000 seconds); all pooled connections were in use

基本上,我想做的是发送许多IP地址到Sidekiq,每个IP都是自己的工作。

ip_array.each do |ip|
  ScanJob.perform_later(@scan, ip, ports)
end

ScanJob会对每一个IP地址进行处理 这可能会花费一些时间 有效地消耗Sidekiq工人的 "池子",一旦消耗,任何剩余的Job都会失败 因为所有的池子连接都在使用中,就像错误所说的那样。

比如说,我需要针对50个地址运行ScanJob。 有没有办法限制Sidekiq池的大小,一次运行5个,然后把剩下的45个排队。 当这5个完成后,再运行下一个5个(剩余40个排队作业),以此类推?

ruby-on-rails ruby sidekiq
1个回答
0
投票

试试这个。bundle exec sidekiq -c 5

© www.soinside.com 2019 - 2024. All rights reserved.