6.3. メッセージの受信
この例では、JNDI コンテキストを作成し、そのコンテキストを使用して ConnectionFactory および Destination を検索し、ファクトリーを使用して Connection を作成および起動し、Session を作成します。次に、Destination に MessageConsumer が作成され、それを使用してメッセージを受信し、その内容がコンソールに出力されます。その後、Connection が閉じられ、プログラムは終了します。送信例 と同じ JNDI 設定が使用されます。
この Receiver の例の実行可能なバリアントは、以前に 3章スタートガイド に記載されている Hello World の例とともに、クライアントディストリビューションのサンプルディレクトリーに含まれます。
例: メッセージの受信
package org.jboss.amq.example;
import jakarta.jms.Connection;
import jakarta.jms.ConnectionFactory;
import jakarta.jms.Destination;
import jakarta.jms.ExceptionListener;
import jakarta.jms.JMSException;
import jakarta.jms.Message;
import jakarta.jms.MessageConsumer;
import jakarta.jms.Session;
import jakarta.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
public class Receiver {
public static void main(String[] args) throws Exception {
try {
Context context = new InitialContext();
ConnectionFactory factory = (ConnectionFactory) context.lookup("myFactoryLookup");
Destination destination = (Destination) context.lookup("myDestinationLookup");
Connection connection = factory.createConnection("<username>", "<password>");
connection.setExceptionListener(new MyExceptionListener());
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageConsumer messageConsumer = session.createConsumer(destination);
Message message = messageConsumer.receive(5000);
if (message == null) {
System.out.println("A message was not received within given time.");
} else {
System.out.println("Received message: " + ((TextMessage) message).getText());
}
connection.close();
} catch (Exception exp) {
System.out.println("Caught exception, exiting.");
exp.printStackTrace(System.out);
System.exit(1);
}
}
private static class MyExceptionListener implements ExceptionListener {
@Override
public void onException(JMSException exception) {
System.out.println("Connection ExceptionListener fired, exiting.");
exception.printStackTrace(System.out);
System.exit(1);
}
}
}
- 1
- JNDI
Contextを作成し、ConnectionFactoryおよびDestinationオブジェクトを検索します。設定は、前述 のjndi.propertiesファイルから選択されます。 - 2
ConnectionFactoryおよびDestinationオブジェクトは、ルックアップ名を使用して JNDIContextから取得されます。- 3
- ファクトリーは
Connectionの作成に使用され、次にExceptionListenerが登録されて開始します。接続の作成時に指定される認証情報は、通常適切な外部設定ソースから取得され、アプリケーション自体とは別のままとなり、個別に更新できます。 - 4
- トランザクション以外の自動承認
SessionがConnectionに作成されます。 - 5
MessageConsumerは、Destinationからメッセージを受信するために作成されます。- 6
- メッセージを受信する呼び出しは、5 秒のタイムアウトで行われます。
- 7
- 結果は確認され、メッセージが受信された場合はその内容が出力されます。または、メッセージが受信されなかったことが通知されます。結果は、
Senderが送信された内容であるため、TextMessageに明示的にキャストされます。 - 8
Connectionは閉じられます。SessionおよびMessageConsumerは暗黙的に閉じられます。
これは単なる例であることに注意してください。実際のアプリケーションは、通常有効期限の長い MessageConsumer を使用し、時間の経過とともに多くのメッセージを受信します。通常、各メッセージの Connection、Session、および MessageConsumer を開くと効率的ではありません。