hornetQ のドキュメントを読みましたが、かなり混乱しました。hornetQ で JMS トピックを作成するための正確な例を教えてください。と の xml 構成を意味しhornetq-jms.xml
ますhornetq-configuration.xml
。という名前のトピックと、 、 という名前のtop
2 つのサブスクライバーがあるとします。私が得たのは、2 つのキュー (サブスクライバーごとに 1 つ) を定義し、それらを実際にはトピック名であるアドレスにバインドする必要があるということですが、サブスクライバーはどのキューに接続する必要があるかをどのように知るのでしょうか? (彼らはトピック名しか知りません)sub1
sub2
1 に答える
JMS 仕様がトピックを記述する方法とは対照的に、HornetQ が内部的にトピックを処理する方法に混乱していると思います。
JMS仕様から始めましょう。ここには、クライアントによってパブリッシュされる、n 人のサブスクライバーがメッセージを聞くことができる 1 つのトピックがあります。JMS では、単数形の宛先についてのみ話します。トピックまたはキューにそれぞれメッセージを送信します。
HornetQ は JMS プロバイダー (JMS 仕様を実装するサーバー) であるため、Java クライアントはそれに接続して JMS-API を使用できます。JMS プロバイダーは変更される可能性がありますが、コードは別の JMS プロバイダーを使用しても機能するはずです。
ただし、HornetQ は汎用メッセージング ミドルウェアになろうとするため、宛先 (トピックまたはキュー) を内部的に区別しません。HornetQ では、すべてのトピックまたはキューが「アドレス」および「キュー」として実装されます。JMS-API の代わりに HornetQ API (CoreAPI) を使用する場合、このようなことに対処する必要があります。HornetQ ドキュメントの Address セクションを読む必要があります。
基本的に、トピックの概念はありません。トピックは JMS のみの用語です。代わりに、コアでは、アドレスとキューを処理するだけです。
たとえば、JMS トピックは、多くのキューがバインドされている単一のアドレスによって実装されます。各キューは、トピックのサブスクリプションを表します。JMS キューは、1 つのキューがバインドされる単一のアドレスとして実装されます。そのキューは JMS キューを表します。
HornetQ を介して JMS でトピックを使用する方法の例については、HornetQ 自体に付属の例を強くお勧めします。hornetq アーカイブをダウンロードして解凍したら、examples/jms/topic
ディレクトリに移動して readme.html を参照し、実装方法とサンプルの実行方法の概要を確認してください ( mvn verify
)。