メッセージキューとWebサービスの違いは?[closed] 質問する

メッセージキューとWebサービスの違いは?[closed] 質問する

どのような条件下では、Web サービス (ここでは特定のタイプではなく、HTTP 経由の XML、JSON、YAML など) ではなくメッセージ キューを介して通信するアプリが優先されるのでしょうか。

ローカル ネットワーク上の 2 つのアプリ間で通信する必要があります。1 つは Web アプリで、別のアプリ (別のハードウェアで実行) にコマンドを要求する必要があります。要求は、ユーザーの作成、ファイルの移動、ディレクトリの作成などです。どのような状況で、メッセージ キューを使用するよりも XML Web サービス (ま​​たは単純な TCP など) を使用する方がよいでしょうか。

Web アプリは Ruby on Rails ですが、質問はそれよりも広範囲に及ぶと思います。

ベストアンサー1

Web サービスを使用する場合、クライアントとサーバーが存在します。

  1. サーバーに障害が発生した場合、クライアントはエラーを処理する責任を負う必要があります。
  2. サーバーが再び動作するようになったら、クライアントはそれを再送信する責任があります。
  3. サーバーが呼び出しに応答し、クライアントが失敗した場合、操作は失われます。
  4. つまり、競合は発生しません。1 秒間に何百万ものクライアントが 1 つのサーバー上の Web サービスを呼び出すと、サーバーがダウンする可能性が高くなります。
  5. サーバーからの即時応答を期待できますが、非同期呼び出しも処理できます。

RabbitMQ、Beanstalkd、ActiveMQ、IBM MQ Series、Tuxedo などのメッセージ キューを使用する場合、異なる、よりフォールト トレラントな結果が期待できます。

  1. サーバーに障害が発生した場合、キューはメッセージを保持します (オプションで、マシンがシャットダウンした場合でも保持されます)。
  2. サーバーが再び動作すると、保留中のメッセージが受信されます。
  3. サーバーが呼び出しに応答し、クライアントが失敗した場合、クライアントが応答を確認しなかった場合、メッセージは保持されます。
  4. 競合が発生した場合、サーバーによって処理されるリクエストの数を決定できます (代わりにワーカーと呼びます)。
  5. 即時の同期応答は期待できませんが、同期呼び出しを実装/シミュレートすることはできます。

メッセージ キューにはさらに多くの機能がありますが、これはエラー状態を自分で処理するか、メッセージ キューに任せるかを決定するための経験則です。

おすすめ記事