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