public interface JMSConsumer extends AutoCloseableSE
JMSConsumer
オブジェクトを使用して、キューまたはトピックからメッセージを受信します。JMSConsumer
オブジェクトは、Queue
または Topic
オブジェクトを JMSContext
の createConsumer
メソッドの 1 つに渡すことによって作成できます。または、Topic
オブジェクトを JMSContext
の createSharedConsumer
または createDurableConsumer
メソッドのいずれかに渡すこと JMSConsumer
は、メッセージセレクターを使用して作成できます。メッセージセレクターを使用すると、クライアントは JMSConsumer
に配信されるメッセージをセレクターに一致するメッセージに制限できます。
クライアントは、JMSConsumer
のメッセージを同期的に受信するか、JMSConsumer
にメッセージの到着時に非同期で配信させることができます。
同期受信の場合、クライアントは、receive
メソッドの 1 つを使用して、JMSConsumer
から次のメッセージをリクエストできます。クライアントがポーリングしたり、次のメッセージを待機したりできるようにする receive
にはいくつかのバリエーションがあります。
非同期配信の場合、クライアントは MessageListener
オブジェクトを JMSConsumer
に登録できます。メッセージが JMSConsumer
に到着すると、MessageListener
の onMessage
メソッドを呼び出してメッセージを配信します。
MessageListener
が例外をスローするのはクライアントプログラミングエラーです。
JMSContext
修飾子と型 | メソッドと説明 |
---|---|
void | close() JMSConsumer を閉じます。 |
MessageListener | getMessageListener() JMSConsumer の MessageListener を取得します。 |
StringSE | getMessageSelector() この JMSConsumer のメッセージセレクター式を取得します。 |
Message | receive() この JMSConsumer 用に作成された次のメッセージを受け取ります。 |
Message | receive(long timeout) 指定されたタイムアウト間隔内に到着する次のメッセージを受信します。 |
<T> T | receiveBody(ClassSE<T> c) この JMSConsumer に対して生成された次のメッセージを受信し、その本文を指定された型のオブジェクトとして返します。 |
<T> T | receiveBody(ClassSE<T> c, long timeout) この JMSConsumer に対して生成された、指定されたタイムアウト期間内に到着する次のメッセージを受信し、その本文を指定された型のオブジェクトとして返します。 |
<T> T | receiveBodyNoWait(ClassSE<T> c) この JMSConsumer がすぐに使用可能になった場合に生成される次のメッセージを受信し、その本文を指定された型のオブジェクトとして返します。 |
Message | receiveNoWait() 次のメッセージがすぐに利用可能な場合、受信します。 |
void | setMessageListener(MessageListener listener) JMSConsumer の MessageListener を設定します。 |
StringSE getMessageSelector()
JMSConsumer
のメッセージセレクター式を取得します。JMSConsumer
のメッセージセレクター、または JMSConsumer
のメッセージセレクターが存在しない場合は null (つまり、メッセージセレクターが設定されていないか、null または空の文字列に設定されている場合)JMSRuntimeException
- 内部エラーが原因で Jakarta Messaging プロバイダーがメッセージセレクターの取得に失敗した場合。MessageListener getMessageListener() throws JMSRuntimeException
JMSConsumer
の MessageListener
を取得します。 このメソッドは、Jakarta EE Web または EJB アプリケーションでは使用しないでください。保証されていませんが、JMSRuntimeException
がスローされる可能性があります。
JMSConsumer
の MessageListener
、または設定されていない場合は nullJMSRuntimeException
- 次のいずれかの理由で Jakarta Messaging プロバイダーが MessageListener
の取得に失敗した場合:setMessageListener(javax.jms.MessageListener)
void setMessageListener(MessageListener listener) throws JMSRuntimeException
JMSConsumer
の MessageListener
を設定します。MessageListener
を null に設定することは、JMSConsumer
の MessageListener
を設定解除することと同じです。
メッセージが既存のリスナーによって消費されている間、または JMSConsumer
がメッセージを同期的に消費するために使用されているときに、このメソッドを呼び出す効果は定義されていません。
このメソッドは、Jakarta EE Web または EJB アプリケーションでは使用しないでください。保証されていませんが、JMSRuntimeException
がスローされる可能性があります。
listener
- メッセージの配信先のリスナー JMSRuntimeException
- Jakarta Messaging プロバイダーが次のいずれかの理由で JMSConsumer
の MessageListener
の設定に失敗した場合:getMessageListener()
Message receive()
JMSConsumer
用に作成された次のメッセージを受け取ります。 この呼び出しは、メッセージが生成されるまで、またはこの JMSConsumer
が閉じられるまで、無期限にブロックされます。
この receive
がトランザクション内で実行される場合、JMSConsumer は、トランザクションがコミットされるまでメッセージを保持します。
JMSConsumer
に対して生成される次のメッセージ、またはこの JMSConsumer
が同時に閉じられている場合は nullJMSRuntimeException
- 内部エラーのために Jakarta Messaging プロバイダーが次のメッセージを受信できない場合。Message receive(long timeout)
この呼び出しは、メッセージが到着するか、タイムアウトが期限切れになるか、この JMSConsumer
が閉じられるまでブロックされます。ゼロの timeout
が期限切れになることはなく、呼び出しは無期限にブロックされます。
timeout
- タイムアウト値 (ミリ秒単位)JMSConsumer
に対して生成される次のメッセージ、またはタイムアウトが期限切れになるか、この JMSConsumer
が同時に閉じられる場合は nullJMSRuntimeException
- 内部エラーのために Jakarta Messaging プロバイダーが次のメッセージを受信できない場合。Message receiveNoWait()
JMSConsumer
に対して生成される次のメッセージ、または使用できない場合は nullJMSRuntimeException
- 内部エラーのために Jakarta Messaging プロバイダーが次のメッセージを受信できない場合。void close()
JMSConsumer
を閉じます。 プロバイダーは、Java 仮想マシンの外部で JMSConsumer
に代わって一部のリソースを割り当てる可能性があるため、クライアントは、必要のないときに閉じる必要があります。最終的にこれらのリソースを再利用するためにガベージコレクションに依存することは、十分なタイムリーではない可能性があります。
この呼び出しは、このコンシューマーで進行中の receive
呼び出しが完了するまでブロックされます。ブロックされた receive
呼び出しは、このコンシューマーが閉じられると null を返します。
メッセージリスナーが別のスレッドで進行しているときにこのメソッドが呼び出されると、メッセージリスナーが完了するまでブロックされます。
このメソッドは、それ自体のコンシューマー上のメッセージリスナーの onMessage
メソッドから呼び出すことができます。このメソッドが戻った後、onMessage
メソッドは正常に完了することができます。
このメソッドは、同時に呼び出すことができる唯一の JMSConsumer
メソッドです。
AutoCloseableSE
の closeSE
JMSRuntimeException
- 内部エラーが原因で Jakarta Messaging プロバイダーがコンシューマーを閉じることができない場合。<T> T receiveBody(ClassSE<T> c)
JMSConsumer
に対して生成された次のメッセージを受信し、その本文を指定された型のオブジェクトとして返します。このメソッドは、メッセージに指定された型に割り当てることができる本文が含まれている限り、StreamMessage
と Message
を除くすべての型のメッセージを受信するために使用できます。これは、指定されたクラスまたはインターフェースが、メッセージ本文のクラスと同じであるか、スーパークラスまたはスーパーインターフェースである必要があることを意味します。メッセージがサポートされている型の 1 つではない場合、メッセージの本文を指定された型に割り当てることができない場合、またはメッセージに本文がない場合は、MessageFormatRuntimeException
がスローされます。 このメソッドは、メッセージヘッダーまたはプロパティ(JMSRedelivered
メッセージヘッダーフィールドや JMSXDeliveryCount
メッセージプロパティなど)へのアクセスを許可しないため、アプリケーションがそれらにアクセスする必要がない場合にのみ使用する必要があります。
この呼び出しは、メッセージが生成されるまで、またはこの JMSConsumer
が閉じられるまで、無期限にブロックされます。
このメソッドがトランザクション内で呼び出された場合、JMSConsumer
は、トランザクションがコミットされるまでメッセージを保持します。
このメソッドが MessageFormatRuntimeException
をスローした結果は、セッションモードによって異なります。
AUTO_ACKNOWLEDGE
または DUPS_OK_ACKNOWLEDGE
: Jakarta Messaging プロバイダーは、receiveBody
への呼び出しが失敗しなかったかのように動作します。メッセージは、後続のメッセージの前に再度配信されます。これは再配信とは見なされず、JMSRedelivered
メッセージヘッダーフィールドが設定されたり、JMSXDeliveryCount
メッセージプロパティがインクリメントされたりすることはありません。CLIENT_ACKNOWLEDGE
: Jakarta Messaging プロバイダーは、receiveBody
への呼び出しが成功したかのように動作し、メッセージを再度配信しません。CLIENT_ACKNOWLEDGE
のセッションモードで配信される他のメッセージと同様に、JMSContext
で acknowledge
が呼び出されるまで、メッセージは確認応答されません。アプリケーションが失敗したメッセージの再配信を希望する場合は、JMSContext
で recover
を呼び出す必要があります。再配信されたメッセージの JMSRedelivered
メッセージヘッダーフィールドが設定され、その JMSXDeliveryCount
メッセージプロパティがインクリメントされます。receiveBody
への呼び出しが成功したかのように動作し、メッセージを再度配信しません。トランザクションセッションで配信される他のメッセージと同様に、トランザクションは、アプリケーションによってコミットまたはロールバックされるまで、コミットされないままになります。アプリケーションが失敗したメッセージの再配信を希望する場合は、トランザクションをロールバックする必要があります。再配信されたメッセージの JMSRedelivered
メッセージヘッダーフィールドが設定され、その JMSXDeliveryCount
メッセージプロパティがインクリメントされます。T
- メッセージ本文の型 c
- 次のメッセージの本文を割り当てる型。TextMessage
であると予想される場合は、これを String.class
または String
が割り当て可能な別のクラスに設定する必要があります。ObjectMessage
であると予想される場合は、これを java.io.Serializable.class
または本文が割り当て可能な別のクラスに設定する必要があります。MapMessage
であると予想される場合は、これを java.util.Map.class
(または java.lang.Object.class
)に設定する必要があります。BytesMessage
であると予想される場合は、これを byte[].class
(または java.lang.Object.class
)に設定する必要があります。JMSConsumer
に対して生成される次のメッセージの本文、またはこの JMSConsumer
が同時に閉じられている場合は nullMessageFormatRuntimeException
-ObjectMessage
であり、オブジェクトの逆直列化が失敗した場合。JMSRuntimeException
- 内部エラーが原因で Jakarta Messaging プロバイダーが次のメッセージを受信できない場合 <T> T receiveBody(ClassSE<T> c, long timeout)
JMSConsumer
に対して生成された、指定されたタイムアウト期間内に到着する次のメッセージを受信し、その本文を指定された型のオブジェクトとして返します。このメソッドは、メッセージに指定された型に割り当てることができる本文が含まれている限り、StreamMessage
と Message
を除くすべての型のメッセージを受信するために使用できます。これは、指定されたクラスまたはインターフェースが、メッセージ本文のクラスと同じであるか、スーパークラスまたはスーパーインターフェースである必要があることを意味します。メッセージがサポートされている型の 1 つではない場合、メッセージの本文を指定された型に割り当てることができない場合、またはメッセージに本文がない場合は、MessageFormatRuntimeException
がスローされます。 このメソッドは、メッセージヘッダーまたはプロパティ(JMSRedelivered
メッセージヘッダーフィールドや JMSXDeliveryCount
メッセージプロパティなど)へのアクセスを許可しないため、アプリケーションがそれらにアクセスする必要がない場合にのみ使用する必要があります。
この呼び出しは、メッセージが到着するか、タイムアウトが期限切れになるか、この JMSConsumer
が閉じられるまでブロックされます。ゼロのタイムアウトが期限切れになることはなく、呼び出しは無期限にブロックされます。
このメソッドがトランザクション内で呼び出された場合、JMSConsumer
は、トランザクションがコミットされるまでメッセージを保持します。
このメソッドが MessageFormatRuntimeException
をスローした結果は、セッションモードによって異なります。
AUTO_ACKNOWLEDGE
または DUPS_OK_ACKNOWLEDGE
: Jakarta Messaging プロバイダーは、receiveBody
への呼び出しが失敗しなかったかのように動作します。メッセージは、後続のメッセージの前に再度配信されます。これは再配信とは見なされず、JMSRedelivered
メッセージヘッダーフィールドが設定されたり、JMSXDeliveryCount
メッセージプロパティがインクリメントされたりすることはありません。CLIENT_ACKNOWLEDGE
: Jakarta Messaging プロバイダーは、receiveBody
への呼び出しが成功したかのように動作し、メッセージを再度配信しません。CLIENT_ACKNOWLEDGE
のセッションモードで配信される他のメッセージと同様に、JMSContext
で acknowledge
が呼び出されるまで、メッセージは確認応答されません。アプリケーションが失敗したメッセージの再配信を希望する場合は、JMSContext
で recover
を呼び出す必要があります。再配信されたメッセージの JMSRedelivered
メッセージヘッダーフィールドが設定され、その JMSXDeliveryCount
メッセージプロパティがインクリメントされます。receiveBody
への呼び出しが成功したかのように動作し、メッセージを再度配信しません。トランザクションセッションで配信される他のメッセージと同様に、トランザクションは、アプリケーションによってコミットまたはロールバックされるまで、コミットされないままになります。アプリケーションが失敗したメッセージの再配信を希望する場合は、トランザクションをロールバックする必要があります。再配信されたメッセージの JMSRedelivered
メッセージヘッダーフィールドが設定され、その JMSXDeliveryCount
メッセージプロパティがインクリメントされます。T
- メッセージ本文型 c
- 次のメッセージの本文を割り当てる型。TextMessage
であると予想される場合は、これを String.class
または String
が割り当て可能な別のクラスに設定する必要があります。ObjectMessage
であると予想される場合は、これを java.io.Serializable.class
または本文が割り当て可能な別のクラスに設定する必要があります。MapMessage
であると予想される場合は、これを java.util.Map.class
(または java.lang.Object.class
)に設定する必要があります。BytesMessage
であると予想される場合は、これを byte[].class
(または java.lang.Object.class
)に設定する必要があります。timeout
- このメソッドがブロックする最大時間。ゼロは無期限にブロックすることを意味します。JMSConsumer
に対して生成される次のメッセージの本文、またはタイムアウトが期限切れになるか、この JMSConsumer
が同時に閉じられる場合は nullMessageFormatRuntimeException
-ObjectMessage
であり、オブジェクトの逆直列化が失敗した場合。JMSRuntimeException
- 内部エラーが原因で Jakarta Messaging プロバイダーが次のメッセージを受信できない場合 <T> T receiveBodyNoWait(ClassSE<T> c)
JMSConsumer
がすぐに使用可能になった場合に生成される次のメッセージを受信し、その本文を指定された型のオブジェクトとして返します。このメソッドは、メッセージに指定された型に割り当てることができる本文が含まれている限り、StreamMessage
と Message
を除くすべての型のメッセージを受信するために使用できます。これは、指定されたクラスまたはインターフェースが、メッセージ本文のクラスと同じであるか、スーパークラスまたはスーパーインターフェースである必要があることを意味します。メッセージがサポートされている型の 1 つではない場合、メッセージの本文を指定された型に割り当てることができない場合、またはメッセージに本文がない場合は、MessageFormatRuntimeException
がスローされます。 このメソッドは、メッセージヘッダーまたはプロパティ(JMSRedelivered
メッセージヘッダーフィールドや JMSXDeliveryCount
メッセージプロパティなど)へのアクセスを許可しないため、アプリケーションがそれらにアクセスする必要がない場合にのみ使用する必要があります。
メッセージがすぐに利用できない場合は、null が返されます。
このメソッドがトランザクション内で呼び出された場合、JMSConsumer
は、トランザクションがコミットされるまでメッセージを保持します。
このメソッドが MessageFormatRuntimeException
をスローした結果は、セッションモードによって異なります。
AUTO_ACKNOWLEDGE
または DUPS_OK_ACKNOWLEDGE
: Jakarta Messaging プロバイダーは、receiveBodyNoWait
への呼び出しが失敗しなかったかのように動作します。メッセージは、後続のメッセージの前に再度配信されます。これは再配信とは見なされず、JMSRedelivered
メッセージヘッダーフィールドが設定されたり、JMSXDeliveryCount
メッセージプロパティがインクリメントされたりすることはありません。CLIENT_ACKNOWLEDGE
: Jakarta Messaging プロバイダーは、receiveBodyNoWait
への呼び出しが成功したかのように動作し、メッセージを再度配信しません。CLIENT_ACKNOWLEDGE
のセッションモードで配信される他のメッセージと同様に、JMSContext
で acknowledge
が呼び出されるまで、メッセージは確認応答されません。アプリケーションが失敗したメッセージの再配信を希望する場合は、JMSContext
で recover
を呼び出す必要があります。再配信されたメッセージの JMSRedelivered
メッセージヘッダーフィールドが設定され、その JMSXDeliveryCount
メッセージプロパティがインクリメントされます。receiveBodyNoWait
への呼び出しが成功したかのように動作し、メッセージを再度配信しません。トランザクションセッションで配信される他のメッセージと同様に、トランザクションは、アプリケーションによってコミットまたはロールバックされるまで、コミットされないままになります。アプリケーションが失敗したメッセージの再配信を希望する場合は、トランザクションをロールバックする必要があります。再配信されたメッセージの JMSRedelivered
メッセージヘッダーフィールドが設定され、その JMSXDeliveryCount
メッセージプロパティがインクリメントされます。T
- メッセージ本文の型 c
- 次のメッセージの本文を割り当てる型。TextMessage
であると予想される場合は、これを String.class
または String
が割り当て可能な別のクラスに設定する必要があります。ObjectMessage
であると予想される場合は、これを java.io.Serializable.class
または本文が割り当て可能な別のクラスに設定する必要があります。MapMessage
であると予想される場合は、これを java.util.Map.class
(または java.lang.Object.class
)に設定する必要があります。BytesMessage
であると予想される場合は、これを byte[].class
(または java.lang.Object.class
)に設定する必要があります。JMSConsumer
に対して生成される次のメッセージの本文、またはメッセージがすぐに使用できない場合、この JMSConsumer
が同時に閉じられている場合は nullMessageFormatRuntimeException
-ObjectMessage
であり、オブジェクトの逆直列化が失敗した場合。JMSRuntimeException
- 内部エラーが原因で Jakarta Messaging プロバイダーが次のメッセージを受信できない場合 Copyright © 2019 Eclipse Foundation.
Use is subject to license terms.