1. ホーム
  2. web-services

[解決済み】メッセージキューとウェブサービスは?[をご紹介します。]

2022-04-02 08:03:03

質問

Webサービス(ここではHTTP上のXMLやJSON、YAMLなどを意味し、特定のタイプではありません)ではなく、メッセージキューを介して会話するアプリを支持するのは、どのような条件下ででしょうか?

私はローカルネットワーク上の2つのアプリの間で話をしなければなりません。一方はWebアプリで、もう一方のアプリ(異なるハードウェアで動作)にコマンドを要求する必要があります。リクエストは、ユーザーの作成、ファイルの移動、ディレクトリの作成などです。どのような条件下で、メッセージキューを使用するよりもXML Webサービス(またはストレートTCPなど)を使用する方が良いでしょうか?

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

どのように解決するのですか?

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

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

RabbitMQ、Beanstalkd、ActiveMQ、IBM MQシリーズ、Tuxedoなどのメッセージキューを使用すると、より耐障害性の高い異なる結果を期待できます。

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

メッセージ・キューには他にもいろいろな機能がありますが、エラー発生時に自分で処理するか、メッセージ・キューに任せるかは、このような経験則で判断してください。