2017-01-04 15 views
2

sidekiqが動作する複数のサーバーがある場合、sidekiqはredisをポーリングするときに2つのサーバーに同じジョブを処理させないようにするにはどうすればよいですか?sidekiqは複数のワーカーが同じジョブIDを取得するのをどのように防ぎますか?

誰かがコードベースを指し示すことができます。私は実際に何が起こっているのかを理解したいと思っています。

+0

わかりません。 Sidekiqのベストプラクティスでは、仕事は偶然でなければならず、すべての仕事が少なくとも* 1回は実行されると仮定する必要があります。 https://github.com/mperham/sidekiq/wiki/Best-Practices#2-make-your-job-idempotent-and-transactional –

+0

すでにジョブが既に処理されているかどうかをチェックする必要がありますか?私はそれが冪等級によって意味されるとは思わない。 –

+0

いいえ、私は、システムがすべてのジョブが問題なく繰り返し実行できると想定できることを意味すると思います。 –

答えて

2

BRPOPはアトミックで、リストから項目をポップし、呼び出し元に処理します。リストに3つの要素がある場合、1000人の呼び出し元が同時にbrpopを呼び出すことができます。 3人の発信者が要素を取得し、997人が要素を待ってブロックします。

https://redis.io/commands/brpop

+0

props to brpop! –

+0

作業員が投票しますか、または赤字にソケット/一貫した接続がありますか? –

+0

それらは一度に2秒間ブロックする。 Sidekiqは、Redisにオープンソケットの接続プールを維持します。 https://github.com/mperham/sidekiq/wiki/Advanced-Options#connection-pooling –

関連する問題