インターフェース TopicSubscriber
- すべてのスーパーインターフェース:
AutoCloseableSE
,MessageConsumer
TopicSubscriber
オブジェクトを使用して、トピックに公開されたメッセージを受信します。TopicSubscriber
オブジェクトは、メッセージコンシューマーのパブリッシュ / サブスクライブフォームです。Session.createConsumer
を使用して MessageConsumer
を作成できます。TopicSession
では、トピックごとに複数の TopicSubscriber
オブジェクトを作成できます。トピックの各メッセージを、それを受信する資格がある各サブスクライバーに配信します。メッセージの各コピーは、完全に別個のメッセージとして扱われます。1 つのコピーで行われた作業が他のコピーに影響を与えることはありません。一方を認めても、他方を認めない。1 つのメッセージはすぐに配信され、別のメッセージはサブスクライバーがその前のメッセージを処理するのを待ちます。
通常の TopicSubscriber
オブジェクトは耐久性がありません。彼らはアクティブな間に公開されたメッセージのみを受け取ります。
サブスクライバーのメッセージセレクターによってフィルターで除外されたメッセージは、サブスクライバーに配信されることはありません。サブスクライバーの観点からは、それらは存在しません。
場合によっては、接続がトピックをパブリッシュおよびサブスクライブすることがあります。サブスクライバー NoLocal
属性を使用すると、サブスクライバーは、自身の接続によって発行されたメッセージの配信を禁止できます。
サブスクライバーが非アクティブである間に公開されたメッセージを含め、トピックで公開されたすべてのメッセージをクライアントが受信する必要がある場合、クライアントは永続的な TopicSubscriber
を使用します。Jakarta Messaging プロバイダーは、この永続サブスクリプションの記録を保持し、トピックのパブリッシャーからのすべてのメッセージが、この永続サブスクライバーによって承認されるか、期限が切れるまで保持されるようにします。
永続サブスクライバーとのセッションは、常に同じクライアント ID を提供する必要があります。さらに、各クライアントは、作成する各永続サブスクリプションを(クライアント識別子内で)一意に識別する名前を指定する必要があります。特定の永続サブスクリプションに対して TopicSubscriber
を持つことができるのは、一度に 1 つのセッションだけです。
クライアントは、同じ名前の新しい TopicSubscriber
と新しいトピックまたはメッセージセレクター、あるいはその両方を作成することにより、既存の永続サブスクリプションを変更できます。永続サブスクリプションを変更することは、古いサブスクリプションを登録解除(削除)し、新しいサブスクリプションを作成することと同じです。
unsubscribe
メソッドは、永続サブスクリプションを削除するために使用されます。unsubscribe
メソッドは、Session
または TopicSession
レベルで使用できます。このメソッドは、プロバイダーによってサブスクライバーに代わって維持されている状態を削除します。
MessageConsumer
の作成は、TopicSubscriber
の作成と同じ機能を提供します。恒久サブスクライバーを作成するには、Session.CreateDurableSubscriber
の使用をお勧めします。TopicSubscriber
は、既存のコードをサポートするために提供されています。
メソッドのサマリー
インターフェース jakarta.jms.MessageConsumer から継承されたメソッド
close, getMessageListener, getMessageSelector, receive, receive, receiveNoWait, setMessageListener
メソッドの詳細
getTopic
このサブスクライバーに関連付けられているTopic
を取得します。- 戻り値:
- このサブスクライバーの
Topic
- 例外:
JMSException
- 内部エラーのために、Jakarta Messaging プロバイダーがこのトピックサブスクライバーのトピックを取得できなかった場合。
getNoLocal
このサブスクライバーのNoLocal
属性を取得します。この属性のデフォルト値は false です。- 戻り値:
- ローカルに発行されたメッセージが禁止されている場合は true
- 例外:
JMSException
- 内部エラーのために Jakarta Messaging プロバイダーがこのトピックサブスクライバーのNoLocal
属性の取得に失敗した場合