ruby on railsの開発において並列処理の実行数を管理したかったが、うまくいかなかったのでその原因のお話
Sidekiq-limit_fetchとは
Sidekiq-limit_fetchはsidekiqでの並列処理の実行数を管理するためのgemです。
Gemfile
gem 'sidekiq-limit_fetch'
sidekiq.yml
:queues:
- queue1
- queue2
:limits:
queue1: 2
queue2: 5
上記の場合、queue1は並列実行可能数が2、queue2は並列実行可能数が5となります。
Sidekiq-limit_fetchが仕事しなかったお話
上記のようにsidekiq-limit_fetchのgemを使用しているにも関わらず並行実行数が指定数を超えることが起きました。
この原因としては他のgemによるlimitの設定関数のオーバーライドでした。
Gemfile
gem 'serverspec'
上記のgemが原因でSidekiq-limit_fetchに記載されたset関数が正常に処理されませんでした。
serverspecはサーバーのテストを自動化するためのgemです。
そのため、serverspecをGemfileから削除することでsidekiq-limit_fetchは仕事をしてくれるようになりました。
しかし、並列実行数が稀に超過する現象は引き続き発生したため、自身でジョブの実行数を管理するコードを書く方が安全だということがわかりました。