Java_Message_Service
[Wikipedia|▼Menu]
.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%;font-size:90%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}html.client-js body.skin-minerva .mw-parser-output .mbox-text-span{margin-left:23px!important}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}

この記事は検証可能参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方
出典検索?: "Java Message Service" ? ニュース ・ 書籍 ・ スカラー ・ CiNii ・ J-STAGE ・ NDL ・ dlib.jp ・ ジャパンサーチ ・ TWL(2021年6月)

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

Java EE 1.3 以降に標準で含まれている。データを1つずつバラバラに扱うのではなく、メッセージと呼ばれる塊にまとめて送信するメッセージングを行う。1対1のキューと1対多のトピックが使える。受信は、MessageConsumer.receive() による同期受信のほか、MessageListener を使った非同期受信もできる。
メッセージングの一般的な概念

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

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

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

1対1:
ポイント・ツー・ポイント(キュー)

1対多:出版-購読型モデル(トピック)

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

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

ただ一人だけの消費者がメッセージを取得できる。

生産者は、消費者がメッセージを消費するときに、稼働していなくてもよい。また、消費者もメッセージが送信されたときに稼働していなくてもよい。

出版-購読型モデル

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

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

複数の購読者が、メッセージを取得できる。

出版者と購読者は同時に稼働しないといけない。

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

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

メッセージは本文・ヘッダー・プロパティの3要素からなる。

メッセージ本文には以下の5種類を利用できる。

テキスト

マップ (Map)

オブジェクト (Serializable)

ストリーム (Stream)

バイト配列

プロパティの値としては String もしくは各種プリミティブ型の値が利用できる。プロパティに基づいてメッセージセレクタが利用できる。メッセージセレクタの構文は SQL92 条件式構文のサブセット。LIKE 演算子や中間一致も利用可能。

ヘッダーにはいろいろな項目がある。

JMSReplyTo ヘッダーでは、返信して欲しいキューもしくはトピックスを指定して、メッセージを処理した後、返信メッセージを送って欲しい送り先を指定することができる。

JMSCorrelationID ヘッダーでどのメッセージに対する返信かというのを表現できる。

JMSPriority ヘッダーで配信の優先順位を指定できる。

JMSDeliveryMode ヘッダーで、メッセージをストレージに永続化するかどうか指定できる。

利用例
コネクション確立

コネクション確立は以下のようにして行う。最初の1行目は、Apache ActiveMQ の場合であり、実装によって異なる。ConnectionFactory 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) { } }});
ブローカーの起動

ブローカーの起動方法は実装によってまちまちである。別プロセスとして動作させることもできるし、Java VM 内に埋め込む(共存させる)事もできる。例えば、Apache ActiveMQ の場合、new BrokerService().start(); で埋め込みブローカーが起動でき、埋め込みブローカーに対しては vm://localhost で通信できる。
実装

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

Apache ActiveMQ

Apache Qpid(英語版) - AMQPを使用

EMS - TIBCO Software(英語版)

FioranoMQ - フィオラノ ソフトウェア

OpenJMS(英語版) - OpenJMS Group

JBoss Messaging(英語版), HornetQ(英語版) - レッドハット (JBoss)

JORAM(英語版) - OW2 Consortium

OpenMQ - オラクルサン・マイクロシステムズ

Oracle WebLogic Server(英語版), Oracle AQ(英語版) - オラクル

RabbitMQ - AMQPを使用

Solace JMS - Solace Systems(英語版)

SonicMQ - Progress Software(英語版)

StormMQ - AMQPを使用

SwiftMQ

WebSphere Application Server - IBM

WebSphere MQ- IBM

歴史

2001年6月25日 - 1.0.2b リリース

2002年3月18日 - 1.1 リリース

2013年5月21日 - 2.0 リリース

関連項目.mw-parser-output .side-box{margin:4px 0;box-sizing:border-box;border:1px solid #aaa;font-size:88%;line-height:1.25em;background-color:#f9f9f9;display:flow-root}.mw-parser-output .side-box-abovebelow,.mw-parser-output .side-box-text{padding:0.25em 0.9em}.mw-parser-output .side-box-image{padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .side-box-imageright{padding:2px 0.9em 2px 0;text-align:center}@media(min-width:500px){.mw-parser-output .side-box-flex{display:flex;align-items:center}.mw-parser-output .side-box-text{flex:1}}@media(min-width:720px){.mw-parser-output .side-box{width:238px}.mw-parser-output .side-box-right{clear:right;float:right;margin-left:1em}.mw-parser-output .side-box-left{margin-right:1em}}ウィキブックスにJava関連の解説書・教科書があります。

Java Transaction API

メッセージ指向ミドルウェア

外部リンク

Java Message Service (JMS) (英語)

Java Message Service API (英語)

The Java EE 6 Tutorial - Java Message Service (英語)










Java


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:17 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef