2011-12-30 10 views
1

私はTopic Publisherとトピック数の可変数の間でJMS(ActiveMQ)を使用しています。パブ/サブパラダイム:加入者が生きているかどうか知ることができますか?

特定の瞬間に、一部の加入者が「オフライン」(切断、シャットダウン、通信不能など)であるかどうかを確認する必要があります。
JMSが発行者にどの登録者が「登録済み」であるかを知らせる方法はありますか?

今のところ、サブスクライバは特定のキュー(プロデューサとして機能する)で「生きている」メッセージを送信し、パブリッシャはそれらを受信します(コンシューマとして動作します)。 X秒(しきい値)の間「ping」しなかった場合、オフラインであるとみなされます。

が、私はこの機能は、特にそのように設計されて完全にメッセージングやパブリッシュ/サブスクライブパラダイムに関連し、私もそのパブ/サブを知られていないことを知っている...それは動作しますが、私は、車輪を再発明あれば知って興味がありましたパブリッシャーは、メッセージが誰にどこで消費されるのかを心配する必要はありません....しかし、私はそれが知りたければ、おそらく方法があったと思っていました。 結局、それは特に珍しい用途のようではありません....

ありがとうございました。

+0

このスレッドに表示されているような永続サブスクリプションを使用している可能性があります。http://stackoverflow.com/questions/4937262/how-to-find-out-all-subscribers-to-a-jms-topic-have-replied – Alfabravo

+0

@Alfabravoこのスレッドに示されている解決策は、HornetQに固有です。また、DurableSubscriptionsは実際に私がチェックしたいものではありません、彼らは何ですか?彼らがやることは、メッセージを記憶して、「到達不能な」加入者に配信できるようにすることです。これは、その加入者のリストを私のプログラムに公開することはありません。 – mdm

+0

いいえ、その設定はHornetQにバインドされていません。 http://docs.oracle.com/cd/E19798-01/821-1841/bncgd/index.html適切な回避策があれば、http://docs.oracle.com/cd/に役立つかもしれません。 E19798-01/821-1841/bncfx/index.html – Alfabravo

答えて

3

パブリッシャーに加入者に関する情報を直接伝える方法はないと思います。

実際にはAMQ advisory messagesを使用して、サブスクライバのステータスを追跡してください。記事を読む - それはあなたが必要とするすべての情報を提供します。

1

JMSは、パブリッシャとサブスクライバを明示的に切り離します。全体のポイントは、2人が他の人の状態を知っているか気にする必要がないということだった。そのため、JMSには、必要な機能がありません。一方、プロバイダーにはベンダー固有の管理APIがあり、ポールのメモのとおり、AMQ勧告メッセージはActive MQで必要なものです。これらはベンダー固有のものであるため、他のプロバイダに移植することはできませんが、JMS準拠ではありません。 AMQの障害ではなく、JMS仕様の一部ではないということだけです。

関連する問題