0

サーバー側(Java)から変更されたコンテンツについてJavaScriptWebアプリケーションに通知するために現在使用されているカスタムメッセージングシステムの代替品を設計しています。このレガシーメッセージングシステムは、カスタムテキストベースのプロトコルとプレーンJavaソケットを使用してFlashXMLSocketを介して機能します。

置換は、Webアプリケーション(FlashではなくWebソケットを介して)だけでなく、C#で記述された追加のデスクトップクライアントアプリケーションでも使用されます。

私の要件は次のとおりです。

  • ユーザ認証
  • トランスポート暗号化(SSL / TLS)
  • 双方向メッセージ交換
  • ユーザーが受信を許可されたメッセージのみを取得できるようにする、ある種の(自動)パブリッシュ/サブスクライブ
  • 確立されたプロトコルに基づくメッセージ交換(可能な場合は既存のライブラリを使用できるようにするため)
  • クラスタ化可能なサーバーコンポーネント

現時点では、メッセージングシステムは、更新をクライアントに公開するためにのみ使用されます。クライアントはこれらのメッセージに反応し、サーバーから直接(メッセージングシステム経由ではなく)詳細情報を取得します。この新しいメッセージングシステムが正常に確立されれば、将来、より高度なユースケースに使用される可能性があります。いくつかの可能性には、ユーザーのチャット、ファイル交換、サーバーコンポーネントのリモートコントロールが含まれる場合があります。

私はこれらの要件を実装するための実行可能なテクノロジーについて少し調査しましたが、私の選択はejabberd(XMPP)またはRabbitMQ(AMQP)のいずれかを使用することに帰着すると思います。私の要件に関するこれら2つのシステムの主な長所と短所は何ですか?システムインフラストラクチャの他の部分にはすでにRabbitMQを使用しているので、それが私の自然な選択でした。クライアントアプリケーションをこのような重要なメインコンポーネントに直接接続するのが良いかどうかはわかりません。ただし、クライアント通知に別のRabbitMQインストールを使用するだけで、これを軽減できる場合があります。

4

1 に答える 1

2

両方のプロトコルを使用してニーズを満たすことができます。xmppは拡張可能なプロトコルであるため、探しているものがpluginプロトコルの正しい用語としてすでに存在していることは間違いありません。ただし、私を含めた一部の人は、これを実際には欠点と見なす可能性があり、プロトコルがさらに複雑になります。もう1つ覚えておくべきことは、xmppは主にインスタントメッセージングプロトコルとして設計されているということです。たとえば、パブリッシュ/サブスクライブはxmppの拡張であり、プロトコル自体の一部ではありません。

とはいえ、xmppはGoogleなどの組織によって支援されています。つまり、このプロトコルを使用している主要なプレーヤーがいくつかいるため、拡張機能のいくつかは本当に優れており、よく書かれています。

一方、AMQPは、目的に合わせてほぼ特別に設計されたプロトコルです。JP Morgan、Cisco、Credit Suisseなどの組織によって支援されているため、AMQPの初期バージョンは批判されていますが、AMQPが信頼できるプロトコルであることは間違いありません

RabbitMQの使用に関しては、メモリにいくつかの問題があるようですが、この問題について通知されただけで、実際に修正したり、理解したりすることはなかったため、その多くを話すことはできません。ただし、RMQのさまざまなバージョンでこれを経験している人はかなりいるようです。

しかし、私にとってRabbitMQはクラッシュしたことがなく(erlangが1つのことで知られている場合、それは安定性です)、セットアップするのは楽しいことであり、クラスターでのセットアップは非常に簡単で、キューを複数のインスタンスで簡単にミラーリングできますRMQを使用すると、1つ以上のインスタンスにメッセージをディスクに書き込むことで、セキュリティをさらに強化できます。

したがって、RabbitMQとAMQPを使用すると、ニーズに適したプロトコルだと思いますが、xmppでも問題なく機能する可能性があります。

この本を読んだことがあります。これはAMQPとRabbitMQの優れた入門書ですが、技術的な側面が不足しているため、基本的には優れたチュートリアルです。

PS:正直に言うと、何bidirectional message exchangeが必要かはよくわかりませんが、メッセージの送受信を意味するのであれば、AMQPでもその点は明確です。:)

これが、どのプロトコルを選択するかを明らかにするのに役立つことを願っています。

編集

RabbitMQにはvirtual hosts、RabbitMQの独自のインスタンスのように機能するというものがあります。そのため、個別の責任を処理するためだけにクラスターのセットアップから始める必要はありません。キューと交換の設定方法にもよりますが、RabbitMQサーバーに接続しているクライアントに問題はありませんが、クラスタリングは間違いなく良い考えです。また、HAProxyを使用したRabbitMQのセットアップは非常に簡単なようですが、それでも私は経験がありません。

于 2013-01-14T21:44:25.250 に答える