とスケーリングのキューは、私たちは、使用する複数のキューに交換機からのルーティングキーをシャードに便利であるのRabbitMQのconsistent hash exchange。
私たちはキューを使用して作業者を作業に仕上げます。理想的には、これらの労働者を動的に拡大したいが、これは問題を提示する。
スケールアップするには、新しいキューとバインディングを追加する必要があります。それ自体では、これは大したことではありません。シャードされたキーが別のキューに移動し始める可能性はありますが、
したがって、作業者AがThing1を管理していた可能性がありますが、新しいキューを追加すると、作業者BがThing1のメッセージを取得する可能性があります。作業者BがThing1メッセージを取得する前に、作業者Aがすべての処理を完了していることが重要です。
この問題を緩和する方法やプラグインはありますか?
私の最初の質問は、同じキューに対して複数のワーカーを使用できない理由です。特定の順序を保証する必要がある場合に限り、1つのワーカーを1つのキューに制限する必要があります。 – slowjack2k
私はそれを何度も読まなければならなかった。メッセージの順序はあなたにとって重要です。したがって、新しいワーカーを追加する前に、すべてのキューが空であるかどうかを確認する必要があります。プラグインは、新しいキューを追加するときに競合状態が存在することを示します。まれにしか複製されないメッセージで終わることがあります。私はこのプラグインをこのような特殊なケースですべて追加するつもりはない。私は1つの入力キューを作成し、1つのディスパッチャワーカがリッスンし、このプロセスはすべてのメッシュを右側のメッセージキューに配信する役割を担います。 – slowjack2k
@ slowjack2kワーカーはメモリ内の状態を管理しているため、1人の作業者はThing1の状態のみを管理する必要があります。 –