1.JMSの基礎2006.09.20 株式会社四次元データ 宮澤了祐
JMS 1章 JMSの基礎
1.1. JMSとはJMSとはJava Message Serviceの略で、Javaでメッセージングサービスを利用するための標準APIです。 メッセージングとはプログラム間でデータを細かにわけるのではなく、一つのメッセージオブジェクトを作成して通信を行うことです。 常に接続が維持されている必要はなく、非同期に通信を行うことが出来ます。 実装されたメッセージングサービスはいくつかありますが、ここではオープンソースで開発された ActiveMQを使用します。 ActiveMQのインストールとサーバの起動については後述します。 メッセージングの概念を理解するために、宅配便に例えて解説を行います。 あなたは、ある宛先に対して送りたい物(オブジェクト)あったとします。 送るためには封筒やダンボールを用いて梱包を行う必要があります。 梱包された荷物(メッセージオブジェクト)に宛先を記入し、 数ある運送業者(中継サーバ)の中から一つを選択して荷物の配達をお願いします。 送り主がするべきことはこれで終わりますが、現在の荷物の状況を確かめることなどが運送業者によって可能になっていることもあります。 運送業者は書かれた宛先に対して荷物を配達します。もしその宛先が留守であれば(接続されていないならば)いったん持ち帰り、荷物を保存しておきます。 受け取り主が運送業者に対して配信を申し込んだ場合や、指定した時間が立った後、運送業者は再配信を行います。 受け取り主は届いた荷物から中身を取り出すことで、送信された物(オブジェクト)を受け取ることが出来ます。 これがメッセージングの一連の流れです。JMSではこのような一対一での通信以外にも複数の宛先に対してメッセージを送ることも出来るようになっています。 1.2. ActiveMQのインストールと起動まずこちら(http://www.activemq.org/site/download.html)よりActiveMQをダウンロードし、適当な場所に展開します。 執筆時に使用したバージョンは3.2.2です。 解凍したフォルダの中にあるlibフォルダ以下の次のファイルをクラスパスに追加します。
ActiveMQサーバ/MessageBrokerの起動ActiveMQでは中継を行うサーバのことをMessageBrokerと呼んでいます。 JMSを使用するためにはサーバを起動しておく必要があります。 起動するためにはいくつか方法があります。
最も簡単なバッチファイルを用いた実行方法を例に解説します。
コマンドラインより 1.3.簡単なメッセージ送受信のサンプルメッセージを送信するプログラムを作成します。
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 {
//Connectionを作成するFactoryを作成
QueueConnectionFactory factory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_BROKER_URL);
QueueConnection connection = factory.createQueueConnection();
//セッションの作成
QueueSession session = connection.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue("TestQueue");
QueueSender sender= session.createSender(queue);
connection.start();
Message msg = session.createTextMessage("This is Message!!");
//メッセージの送信
sender.send(msg);
sender.close();
session.close();
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
続いて受信側です。
import javax.jms.JMSException;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueReceiver;
import javax.jms.QueueSession;
import javax.jms.TextMessage;
import org.activemq.ActiveMQConnection;
import org.activemq.ActiveMQConnectionFactory;
public class Receiver{
public static void main(String[] args) {
try{
//Connectionを作成するFactoryを作成
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_BROKER_URL);
QueueConnection connection = factory.createQueueConnection();
//セッションの作成
QueueSession session = connection.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue("TestQueue");
//Queueと関連付け
QueueReceiver receiver = session.createReceiver(queue);
connection.start();
//メッセージの受信
TextMessage msg = (TextMessage) receiver.receive();
System.out.println(msg.getText());
receiver.close();
session.close();
connection.close();
}catch(JMSException e){
e.printStackTrace();
}
}
}
Reciever側に次のように出力されれば成功です。 This is Message!! 実行する前に必ずMessageBrokerを起動しておく必要があります。 |
![]()
![]()
|