6

キューを使用するユースケースを理解しようとしています。

私の理解: Queue は 1 対 1 を意味します。唯一の使用例 (まれではないにしても、非常に少ない) は次のとおりです。メッセージは 1 回だけの消費を目的としています。

しかし、そのような場合でも、トピックを使用したい場合があります (将来の安全のために)。唯一の特別な注意は、サブスクリプションを永続的にすることです。または、特別な状況では、ブリッジング/ディスパッチャ メカニズムを使用します。

上記のように、私は常に (またはほとんどの場合) トピックに公開したいと考えています。サブスクライバーは、永続的なトピックまたはディスパッチされたキューのいずれかです。

ここで何が欠けているのか、または元の意図が欠けているのか教えてください。

4

3 に答える 3

6

実際の例で考えると、キューをいつ使用するかに関する設計要件は単純です。

  • オンライン注文を送信する (クレジット カードへの 2 回の請求を避けるため、処理は 1 回のみ)
  • プライベート ピア ツー ピア チャット (メッセージごとに正確に 1 人の受信者)
  • 並列タスク分散 (ネットワーク化されたシステム内の多数のワーカーにタスクを分散)

...トピックをいつ使用するかの例...

  • 複数の加入者へのニュース放送。通知サービス、株価情報など
  • メール クライアント (一意の永続的なサブスクライバー。切断されていてもメールを受信できます)

あなたが言った...

しかし、そのような場合でも、トピックを使用したい場合があります (将来の安全のために)。私がしなければならない唯一の追加のケースは、(各) サブスクリプションを永続的にすることです。または、特別な状況では、ブリッジング/ディスパッチャ メカニズムを使用します。

あなたは設計を過剰に設計しています。確かに、トピックと永続サブスクライバーを使用して 1 回限りの処理を実現できますが、永続サブスクライバーは1 つに制限されます。そのトピックに対して別のサブスクライバーを開始した瞬間に、同じメッセージに対して重複した処理が行われます。それは確かにシステムのボトルネックになります。キューを使用すると、同じキューに対して 100 個のノードに 1000 個のレシーバーをデプロイできますが、1 つのメッセージに対して正確に 1 回の処理が行われます。

あなたが言った...

上記のように、私は常に (またはほとんどの場合) トピックに公開したいと考えています。サブスクライバーは、永続的なトピックまたはディスパッチされたキューのいずれかです。

トピック サブスクライバーでディスパッチ キューを使用するのは、一種の冗長です。キューを使用すると基本的に非同期ディスパッチが発生するため、キューを使用しないのはなぜですか?...トピックをその前に置く理由はありません。

于 2013-07-03T04:01:34.437 に答える