は私がこれらのRabbitMQで複数のコンシューマを持つキューのタスクオーダー処理を保証するにはどうすればよいですか?
AとBの間の友情を終了したいと
AとBの間の友情を開始したいと言うが、私は、複数の消費者(労働者)を持つキューに送信する二つのタスクです。
私は保証処理注文をしたいので、最初の作業の前に2番目の作業を避けるにはどうしたらいいですか?
私のソリューション:make tasks sticky(Aに関するタスクは常に同じコンシューマに送信されます)。
実装:RabbitMQの交換番号を使用し、利用可能なコンシューマにタスクを割り当てます。
Aをコンシューマにマップするにはどうすればよいですか?私はnginxのip_hashについて考えている。私は似たものが必要だと思う。
関連性があるかどうかわかりませんが、AとBはuuid.v4()
UUIDです。
マッピングを行うために必要なアルゴリズムを教えてください。
ご返信ありがとうございます。私はAに関係する仕事が常に同じ労働者に送られることを確かめたい。だから私は5人の労働者がいる場合、私はちょうどAのために常に同じワーカーIDを返すマッピング関数が必要です。なぜこのアプローチはキュー/交換をあまりにも多くもたらすのですか? –
スケーラビリティ。あるワーカーの仕事が多すぎる場合は、ワーカーとキュー/交換を追加する必要があります(1つのキューに1人のワーカーが必要です)。十分な労働者がいない場合は、追加のワーカーとキューを追加する必要があります。さらに追加して追加する...キューごとに複数のワーカーがある場合は、キューではなくワーカーだけを追加します。 – sokoli
マッピング関数を使用する場合は、たとえば5を法とするcrc32を使用できます。結果はワーカーIDになります。追加の作業者は、追加のキューも意味します(それほど良くないほど)。 – sokoli