2.JMSの基礎22006.10.12 株式会社四次元データ 宮澤了祐
JMS 2章 JMSの基礎2
2.1.JMSの構造JMSは次の三種で成り立っています。
JMSクライアントはメッセージを送受信するJavaプログラムのことで、JMSサーバはそれを仲介するプログラムです。 JMSクライアントが送信するメッセージはJMSメッセージと呼ばれています。 JMS自体は標準APIであり、Javaでメッセージングサービスを利用する際には、ActiveMQなどそのAPIを実装したJMSサーバが必要となります。 JMSには次のオブジェクトがあります。
2.2.JMSのメッセージモデルメッセージングを行う場合、次の二種類の状況が存在します。一対一でメッセージをやりとりする状況と、一対多でメッセージをやり取りする場合です。これらをメッセージモデルといいます。 前者の送信側と受信側が一対一であるモデルを Point-to-Pointモデル。後者と送信側と受信側が一対多であるモデルをPublisher-Subscriber と呼びます。Publisher-Subscriberモデルについては次項で解説します。 二種類のメッセージモデルがありますが、利用者はメッセージモデルを意識することなくプログラミングを行うことが出来るように設計されています。 JMSのプログラムの流れは以下になります。
具体的にはモデルによって実装するサブクラスが違うため、プログラムの流れには差がありません。 2.3.Point-to-PointメッセージモデルPTPメッセージモデルは送信者と受信者が一対一でメッセージをやりとりします。 PTPと言っても送信者側と受信者側を直接接続するわけではありません。 JMSサーバ内に作成するDestinationオブジェクトを介してメッセージのやり取りを行います。 送信者はJMSサーバに対してメッセージを送信します。JMSサーバはDestinationオブジェクトにメッセージを保存します。 受信者はJMSサーバ内のDestiationよりメッセージを取り出します。 前項で使用したソースを元に解説していきます。
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import org.activemq.ActiveMQConnectionFactory;
import org.activemq.ActiveMQConnection;
public class Sender {
public static void main(String[] args){
try {
//ConnectionFactoryオブジェクトの作成
QueueConnectionFactory factory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_BROKER_URL);
//Connectionオブジェクトの作成
QueueConnection connection = factory.createQueueConnection();
//Sessionオブジェクトの作成
QueueSession session = connection.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE);
//Destinationオブジェクトの作成
Queue queue = session.createQueue("TestQueue");
//MessageProducerオブジェクトの作成
QueueSender sender= session.createSender(queue);
//Messageオブジェクトの作成
Message msg = session.createTextMessage("This is Message!!");
sender.send(msg);
sender.close();
session.close();
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
まずConnectionFactoryを作成します。ActiveMQでConnectionFactoryを作成するにはいくつか方法がありますが、 最も簡単なインスタンスを作成する方法を使用しています。引数はMessageBrokerを認識するためのURLです。 次に、ConnectionFactoryよりConnectionオブジェクトを作成します。 PTPモデルでのメッセージングを行う場合は、ConnectionFactory#createQueueConnection()メソッドを使用してQueueConnectionオブジェクトを作成します。 続いて、アプリケーションとJMSサーバを接続するSessionオブジェクトを作成します。 Connection#createQueueSession()メソッドで作成します。 第一引数はトランザクション(JTA)を使用するかどうかのフラグです。第二引数で確認モードを設定します。トランザクションと確認モードについては後半で解説します。 QueueSession#createQueue()メソッドによりDestinationオブジェクトを作成します。 QueueオブジェクトはPTPメッセージモデルでのDestinationオブジェクトです。 引数はQueueオブジェクトの識別名です。 MessageProducerオブジェクトを作成します。PTPモデルで使用するMessageProducerはQueueSenderオブジェクトです。 関連付けるQueueオブジェクトを引数に持ちます。 QueueSession#createTextMessage()メソッドでテキストを送信するJMSメッセージオブジェクトを作成します。 QueueSender#send()メソッドで送信します。 続いて受信側です。 送信側も受信側も大して差はありません。送信側がMessageProducerオブジェクトを作成するのに対し、受信者側はMessageConsumerオブジェクトを作成します。
...
Queue queue = session.createQueue("TestQueue");
QueueReceiver receiver = session.createReceiver(queue);
TextMessage msg = (TextMessage) receiver.receive();
System.out.println(msg.getText());
...
PTPモデルでのMessageConsumerがQueueReceiverオブジェクトです。引数は関連付けるQueueオブジェクトです。 メッセージの受信はQueueReceiver#receive()メソッドを用います。 メッセージを受け取るまで待機します。 |
![]()
![]()
|