コンテンツにスキップ

Java Message Service

出典: フリー百科事典『ウィキペディア(Wikipedia)』

これはこのページの過去の版です。MoreNet (会話 | 投稿記録) による 2012年1月16日 (月) 13:01個人設定で未設定ならUTC)時点の版 (出版-購読型モデル)であり、現在の版とは大きく異なる場合があります。

Java Message Service (JMS) とはJavaプログラムネットワークを介してデータを送受信させるためのAPIである。

Java EE 1.3プラットフォームに標準で含まれている。データを1つずつバラバラに扱うのではなく、メッセージと呼ばれる塊にまとめて送信する、メッセージング機能が使えるようになる。また、一対一の同期通信の他、複数の宛先に同じメッセージを送信したり、メッセージを非同期に通信したりすることもできる。

メッセージングの一般的な概念

メッセージングとは、疎結合分散通信形式のひとつの形式である。この文脈上での"通信"とはソフトウェアコンポーネント間のメッセージ交換である。

メッセージ指向技術は、キューのような仲介役のコンポーネントの導入によって密結合通信(TCPネットワークソケット、CORBA、 RMIのような)を緩和する。このアプローチによって、ソフトウェアコンポーネントがお互いに"間接的に"通信するようになる。この利益は、キューを使用して通信する場合に、メッセージ送信者が正確に受信者を知る必要がないということも含んでいる。

モデル

JMS API は二つのモデルをサポートする。

ポイント・ツー・ポイント

ポイント・ツー・ポイントにおいて、送信者は特定のキューへメッセージを送信し受信者はそのキューからメッセージを読み込む。 ここで送信者は、メッセージの宛先を知っていて、受信者のキューに対して直接メッセージを送信している。 これは、次のことを特色づける

  • ただ一人だけの消費者がメッセージを取得できる
  • 生産者は、消費者がメッセージを消費するときに、稼働していなくてもよい。また、消費者もメッセージが送信されたときに稼働していなくてもよい。

出版-購読型モデル

出版-購読型モデルでは、特定のメッセージトピックに対してメッセージを出版することができる。 購読者は、受信対象のメッセージトピックに対して購読要求を行う。 このモデルでは、出版者と購読者がお互いに知ることがない。

いい比喩として掲示板が挙げられる。

このモデルの特徴を以下に挙げる。

  • 複数の購読者が、メッセージを取得できる。
  • 出版者と購読者間の依存タイミングが存在する。

出版者は、クライアントが購読可能になるためにサブスクリプションを生成しなくてはいけない。購読者は、持続的なサブスクリプションが確立されている間、継続的に受信し続けていなくてはいけない。

コネクション確立

JMSは、アプリケーションをデータの転送レイヤから切り離す方法を提供する。 同じくJavaクラスは、プロバイダを要求するJNDIを使用することによって、異なるJMSプロバイダを通信を行うために利用することができる。 始めに、キューかトピックに接続するためにconnection factoryを使用し、そしてメッセージを送信、もしくは出版する。 受信者側では、メッセージを受信、もしくは購読する。

利用例

コネクション確立

コネクション確立は以下のようにして行う。最初の1行目は、Apache ActiveMQ の場合であり、実装によって異なる。

ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = connectionFactory.createConnection();
// ここでメッセージの受信のリスナーの登録を行う
connection.start();
// ここでメッセージの送信を行う
connection.close();

出版-購読型モデル

出版-購読型モデルは以下のようにして行う。以下、送信側の例。

Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Topic testTopic = session.createTopic("testTopic");
MessageProducer producer = session.createProducer(testTopic);
producer.send(session.createTextMessage("Hello JMS"));

以下、受信側の例。

Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Topic testTopic = session.createTopic("testTopic");
MessageConsumer consumer = session.createConsumer(testTopic);
consumer.setMessageListener(new MessageListener() {
    public void onMessage(Message message) {
        try {
            System.out.println(((TextMessage) message).getText());
        } catch (JMSException e) {
        }
    }
});

実装

以下のソフトウェアで実装されている。

歴史

  • 2001年6月25日 - 1.0.2b リリース
  • 2002年3月18日 - 1.1 リリース

関連項目

外部リンク