インターフェース MessageConsumer
- すべてのスーパーインターフェース:
AutoCloseableSE
- すべての既知のサブインターフェース:
QueueReceiver,TopicSubscriber
MessageConsumer オブジェクトを使用して、宛先からメッセージを受信します。MessageConsumer オブジェクトは、Destination オブジェクトをセッションによって提供されるメッセージコンシューマー作成メソッドに渡すことによって作成されます。MessageConsumer は、すべてのメッセージコンシューマーの親インターフェースです。
MessageConsumer は、メッセージセレクターを使用して作成できます。メッセージセレクターを使用すると、クライアントは、メッセージコンシューマーに配信されるメッセージを、セレクターに一致するメッセージに制限できます。
クライアントは、MessageConsumer のメッセージを同期的に受信するか、MessageConsumer にメッセージの到着時に非同期で配信させることができます。
同期受信の場合、クライアントは、receive メソッドの 1 つを使用して、MessageConsumer から次のメッセージをリクエストできます。クライアントがポーリングしたり、次のメッセージを待機したりできるようにする receive にはいくつかのバリエーションがあります。
非同期配信の場合、クライアントは MessageListener オブジェクトを MessageConsumer に登録できます。メッセージが MessageConsumer に到着すると、MessageListener の onMessage メソッドを呼び出してメッセージを配信します。
MessageListener が例外をスローするのはクライアントプログラミングエラーです。
- 導入:
- JMS 1.0
- バージョン:
- Jakarta Messaging 2.0
- 関連事項:
方法の概要
修飾子と型メソッド説明voidclose()メッセージコンシューマーを閉じます。MessageConsumerのMessageListenerを取得します。このメッセージコンシューマーのメッセージセレクタ式を取得します。receive()このメッセージコンシューマー用に作成された次のメッセージを受信します。receive(long timeout) 指定されたタイムアウト間隔内に到着する次のメッセージを受信します。次のメッセージがすぐに利用可能な場合、受信します。voidsetMessageListener(MessageListener listener) MessageConsumerのMessageListenerを設定します。
メソッドの詳細
getMessageSelector
このメッセージコンシューマーのメッセージセレクタ式を取得します。- 戻り値:
- このメッセージコンシューマーのメッセージセレクター、またはメッセージコンシューマーのメッセージセレクターが存在しない場合は null (つまり、メッセージセレクターが設定されていないか、null または空の文字列に設定されている場合)
- 例外:
JMSException- 内部エラーが原因で Jakarta Messaging プロバイダーがメッセージセレクターの取得に失敗した場合。
getMessageListener
MessageConsumerのMessageListenerを取得します。このメソッドは、Jakarta EE Web または EJB アプリケーションでは使用しないでください。保証されていませんが、
JMSExceptionがスローされる可能性があります。- 戻り値:
MessageConsumerのMessageListener、または設定されていない場合は null- 例外:
JMSException- 次のいずれかの理由で Jakarta Messaging プロバイダーがMessageListenerの取得に失敗した場合:- 内部エラーが発生した、または
- このメソッドは Jakarta EE Web または EJB アプリケーションで呼び出されました (この場合、例外がスローされることは保証されていませんが)
- 関連事項:
setMessageListener
MessageConsumerのMessageListenerを設定します。MessageListenerを null に設定することは、MessageConsumerのMessageListenerを設定解除することと同じです。メッセージが既存のリスナーによって消費されている間、または
MessageConsumerがメッセージを同期的に消費するために使用されているときに、このメソッドを呼び出す効果は定義されていません。このメソッドは、Jakarta EE Web または EJB アプリケーションでは使用しないでください。保証されていませんが、
JMSExceptionがスローされる可能性があります。- パラメーター:
listener- メッセージの配信先のリスナー- 例外:
JMSException- Jakarta Messaging プロバイダーが次のいずれかの理由でMessageConsumerのMessageListenerの設定に失敗した場合:- 内部エラーが発生した、または
- このメソッドは Jakarta EE Web または EJB アプリケーションで呼び出されました (この場合、例外がスローされることは保証されていませんが)
- 関連事項:
receive
このメッセージコンシューマー用に作成された次のメッセージを受信します。この呼び出しは、メッセージが生成されるまで、またはこのメッセージコンシューマーが閉じられるまで、無期限にブロックされます。
この
receiveがトランザクション内で実行される場合、コンシューマーはトランザクションがコミットされるまでメッセージを保持します。- 戻り値:
- このメッセージコンシューマーに対して生成される次のメッセージ、またはこのメッセージコンシューマーが同時に閉じられている場合は null
- 例外:
JMSException- 内部エラーのために Jakarta Messaging プロバイダーが次のメッセージを受信できない場合。
receive
指定されたタイムアウト間隔内に到着する次のメッセージを受信します。この呼び出しは、メッセージが到着するか、タイムアウトが期限切れになるか、このメッセージコンシューマーが閉じられるまでブロックされます。ゼロの
timeoutが期限切れになることはなく、呼び出しは無期限にブロックされます。- パラメーター:
timeout- タイムアウト値 (ミリ秒単位)- 戻り値:
- このメッセージコンシューマーに対して生成される次のメッセージ、またはタイムアウトが期限切れになるか、このメッセージコンシューマーが同時に閉じられる場合は null
- 例外:
JMSException- 内部エラーのために Jakarta Messaging プロバイダーが次のメッセージを受信できない場合。
receiveNoWait
次のメッセージがすぐに利用可能な場合、受信します。- 戻り値:
- このメッセージコンシューマー用に生成された次のメッセージ、または使用できない場合は null
- 例外:
JMSException- 内部エラーのために Jakarta Messaging プロバイダーが次のメッセージを受信できない場合。
close
メッセージコンシューマーを閉じます。プロバイダーは、Java 仮想マシンの外部で
MessageConsumerに代わって一部のリソースを割り当てる可能性があるため、クライアントは、必要のないときに閉じる必要があります。最終的にこれらのリソースを再利用するためにガベージコレクションに依存することは、十分なタイムリーではない可能性があります。この呼び出しは、このコンシューマーで進行中の
receive呼び出しが完了するまでブロックされます。このメッセージコンシューマーが閉じられると、ブロックされたreceive呼び出しは null を返します。メッセージリスナーが別のスレッドで進行しているときにこのメソッドが呼び出されると、メッセージリスナーが完了するまでブロックされます。
このメソッドは、それ自体のコンシューマー上のメッセージリスナーの
onMessageメソッドから呼び出すことができます。このメソッドが戻った後、onMessageメソッドは正常に完了することができます。このメソッドは、同時に呼び出すことができる唯一の
MessageConsumerメソッドです。- 次で指定:
- インターフェース
AutoCloseableSEのclose - 例外:
JMSException- 内部エラーが原因で Jakarta Messaging プロバイダーがコンシューマーを閉じることができない場合。