7.4.10 QueueReceiver(MessageConsumer)インタフェース
QueueReceiver(MessageConsumer)インタフェースは,JMSクライアントがキューからメッセージを受信するために使用します。
(1) メッセージの受信
メッセージを受信できます。メッセージセレクタを設定してQueueReceiverオブジェクトが生成されている場合は,メッセージセレクタに応じたメッセージだけを受信できます。
また,メッセージの受信処理には,次に示す種類があります。
-
通常のメッセージ受信処理
-
次メッセージがすぐに利用できるならそのメッセージを受信する処理
-
タイムアウト間隔内に到着する次メッセージを受信する処理
(2) メッセージセレクタの取得
QueueReceiverオブジェクトを生成する際に設定されたメッセージセレクタを取得します。メッセージセレクタについては,「2.6.2 メッセージセレクタ」を参照してください。
(3) キューレシーバのクローズ
QueueReceiverオブジェクトをクローズできます。クローズによって,QueueReceiverオブジェクトに関連づけられたすべてのリソースを解放します。QueueReceiver(MessageConsumer)インタフェースのメソッドは,複数スレッドからの同時発行をJMSで禁止されています。ただし,close()メソッドだけは複数スレッドから同時発行してパラレルに実行できます。
(4) キューの取得
QueueReceiverオブジェクトを生成する際に設定されたキューを取得します。
(5) 形式
public interface MessageConsumer { public void close() throws JMSException; public MessageListener getMessageListener() throws JMSException; public java.lang.String getMessageSelector() throws JMSException; public Message receive() throws JMSException; public Message receive(long timeout) throws JMSException; public Message receiveNoWait() throws JMSException; public void setMessageListener(MessageListener listener) throws JMSException; } public interface QueueReceiver extends MessageConsumer { public Queue getQueue() throws JMSException; }
(6) フィールド
ありません。
(7) メソッド
「(5) 形式」に記載した順序で各メソッドを説明します。
(a) closeメソッド
public void close() throws JMSException
メッセージコンシューマをクローズします。メッセージコンシューマには幾つかのリソースが割り当てられている場合があるため,リソースが不要になった場合はメッセージコンシューマをクローズしてください。
-
クローズされているメッセージコンシューマをクローズしても例外は発生しません。
-
このメソッドはMessageConsumerインタフェースでは唯一,複数スレッドから同時に発行できます。
-
引数
ありません。
-
戻り値
ありません。
-
例外
例外クラス
説明
JMSException
内部エラーのためにJMSプロバイダがメッセージコンシューマをクローズする処理に失敗しました。
例外クラスには障害コードと障害情報が設定されます。障害コードと対処については,「7.9 障害コードの詳細」を参照してください。
(b) getMessageListenerメソッド
public MessageListener getMessageListener() throws JMSException
このメソッドは未サポートです。
このメソッドを発行した場合,nullを返します。
-
引数
ありません。
-
戻り値
メッセージコンシューマのリスナまたはnull(リスナが設定されていない場合)。
-
例外
ありません。
(c) getMessageSelectorメソッド
public java.lang.String getMessageSelector() throws JMSException
メッセージコンシューマのメッセージセレクタ構文を返します。
-
引数
ありません。
-
戻り値
メッセージコンシューマのメッセージセレクタ。
-
例外
例外クラス
説明
JMSException
セッション,コネクションまたはメッセージコンシューマをクローズしている状態でメソッドを発行しました。
内部エラーのためにJMSプロバイダがメッセージセレクタの取得に失敗しました。
例外クラスには障害コードと障害情報が設定されます。障害コードと対処については,「7.9 障害コードの詳細」を参照してください。
(d) receiveメソッド
public Message receive() throws JMSException
メッセージコンシューマ用に生成された次のメッセージを受信します。
メソッドの発行時に,メッセージコンシューマの生成元であるコネクションがstop状態の場合はnullを返します。メソッドの実行中にコネクションがstop状態になった場合は受信待ち状態でメソッドの処理を続行します。
-
引数
ありません。
-
戻り値
メッセージコンシューマ用に生成される次のメッセージ,またはnull(メッセージコンシューマが同時にクローズされる場合)。
-
例外
例外クラス
説明
JMSException
セッション,コネクションまたはメッセージコンシューマをクローズしている状態でメソッドを発行しました。
内部エラーのためにJMSプロバイダが次のメッセージの受信に失敗しました。
例外クラスには障害コードと障害情報が設定されます。障害コードと対処については,「7.9 障害コードの詳細」を参照してください。
(e) receiveメソッド
public Message receive(long timeout) throws JMSException
指定されたタイムアウト間隔内に到着する次のメッセージを受信します。メッセージが到着するか,タイムアウトになるか,またはメッセージコンシューマがクローズされる場合,このメソッドは終了します。timeout引数に0を指定するとタイムアウトになりません。
メッセージの発行時にメッセージコンシューマの生成元のコネクションがstop状態の場合はnullを返します。メソッドの実行中にコネクションがstop状態になった場合は受信を一時的に中断した状態でタイムアウトするまでメソッドの処理を続行します。
なお,receive()発行時に該当キュー内にメッセージがなかった場合は,その後1秒ごとのポーリングによってキュー内のメッセージの有無をチェックします。
-
引数
引数名
説明
timeout
タイムアウト値(ミリ秒)
-
戻り値
メッセージコンシューマ用に生成される次のメッセージ,またはnull(タイムアウトになるか,メッセージコンシューマが同時にクローズされる場合)。
-
例外
例外クラス
説明
JMSException
セッション,コネクションまたはメッセージコンシューマをクローズしている状態でメソッドを発行しました。
内部エラーのためにJMSプロバイダが次のメッセージの受信に失敗しました。
例外クラスには障害コードと障害情報が設定されます。障害コードと対処については,「7.9 障害コードの詳細」を参照してください。
(f) receiveNoWaitメソッド
public Message receiveNoWait() throws JMSException
次のメッセージがすぐに利用できる場合,そのメッセージを受信します。
メッセージの発行時にメッセージコンシューマの生成元のコネクションがstop状態の場合はnullを返します。
-
引数
ありません。
-
戻り値
メッセージコンシューマ用に生成された次のメッセージ,またはnull(受信できる次のメッセージがない場合)。
-
例外
例外クラス
説明
JMSException
セッション,コネクションまたはメッセージコンシューマをクローズしている状態でメソッドを発行しました。
内部エラーのためにJMSプロバイダが次のメッセージの受信に失敗しました。
例外クラスには障害コードと障害情報が設定されます。障害コードと対処については,「7.9 障害コードの詳細」を参照してください。
(g) setMessageListenerメソッド
public void setMessageListener(MessageListener listener) throws JMSException
このメソッドは未サポートです。
このメソッドで設定した値は実際には使用されません。
-
引数
引数名
説明
listener
メッセージ配送先のリスナ
-
戻り値
ありません。
-
例外
ありません。
(h) getQueueメソッド
public Queue getQueue() throws JMSException
キューレシーバに関連したQueueオブジェクトを返します。
-
引数
ありません。
-
戻り値
レシーバのQueueオブジェクト。
-
例外
例外クラス
説明
JMSException
セッション,コネクションまたはメッセージコンシューマをクローズしている状態でメソッドを発行しました。
内部エラーのためにJMSプロバイダがQueueReceiverオブジェクトに関連づけられたキューの取得に失敗しました。
例外クラスには障害コードと障害情報が設定されます。障害コードと対処については,「7.9 障害コードの詳細」を参照してください。