5

パブリッシュ/サブスクライブ バス (Mule、ZeroMQ、RabbitMQ など) を使用するシステムを構築する必要がありますが、すべての文献は、サブスクライバー アプリケーションが、サブスクライブ先のトピックからのメッセージを確実に受信できることを示唆しています。メッセージを届けることができます。

一部のアプリケーションがパブリッシュ/サブスクライブ バスに確実に接続されるシステムがありますが、他のアプリケーションはアクティブではないか、常にバスに接続されません。

明らかな解決策は、信頼できないアプリケーションとパブリッシュ/サブスクライブ バスの間にある種の「存在」プロトコルを設けて、「存在する」アプリケーションがメッセージをすぐに配信し、「存在しない」アプリケーションがメッセージを永続的なバッファにキューに入れるようにすることです。そして、「プレゼンス ハンドシェイク」が完了するとすぐに、キューに入れられたメッセージが新しくプレゼンスされたアプリケーションに配信されます。

この種の機能が組み込まれているパブリッシュ/サブスクライブ バスはありますか、またはこれを行うオープンソース アドオンはありますか? これについて説明している URL を教えてください。

4

2 に答える 2

6

この動作は、AMQP 準拠のブローカー (RabbitMQ など) で非常に簡単に実現できます。

使用モデルに適した交換タイプを選択してください。directのような絶対的な名前の宛先に常に送信する場合は、交換を使用する必要がありますchat.messages

パターンベースのルーティングを行いたい場合は、topicexchange を使用する必要があります。次に、 などのパターンに基づいてルーティングできますchat.messages.*

ルーティングについては、 RabbitMQ チュートリアルで詳しく説明されています。

言及した種類の永続的なサブスクリプションを作成するには、各サブスクライバーに、そのサブスクライバー専用のキューを作成させます。キューは、選択した交換機の関連するルーティング キーにバインドされます。

各サブスクライバーは独自のキューを持っているため、メッセージはアクティブなときにサブスクライバーによって消費され、サブスクライバーが非アクティブまたは切断されたときに格納されます。

于 2011-06-28T19:55:47.427 に答える
0

選択した言語については言及していませんが、Java では、永続的なサブスクライバーを使用してJMSでこれを実現できます。JMS のすべての実装 (前述の RabbitMQ を含む多数の実装があります) は、この機能をサポートします。

于 2011-06-30T19:18:26.603 に答える