“技術者”としてのホリエモンが語るWeb開発とは?

スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷
企業システムの常識をJBossで身につける
連載インデックスへ
企業システムの識をJBossで身につける(5)

非同期処理と疎結合ができる「メッセージング」の常識


株式会社ビーブレイクシステムズ
相原 淳、山野 信行、上川 伸彦
2010/1/8
企業向けアプリケーションのさまざまな“常識”をJavaのオープンソース・フレームワーク群である「JBoss」から学んでいきましょう。企業システムを構築するうえでの基礎となる知識をリファレンス感覚で説明していきます。初心者から中堅、ベテランまで大歓迎!
今回の主な内容

君に届け、「メッセージング」とは何か?
メッセージ指向ミドルウェアの
  Java標準API「JMS」とは

JMSのAPIを実装した代表的なミドルウェア
JBoss Messagingを使うための環境を構築
JBoss Messagingは、こうやって実装する!
メッセージングをサンプルで体感してみよう
メッセージングとも関連する
  「Webサービス」の常識

 企業システムでは、さまざまなデータを使ってさまざまな処理が行われています。また、システムの複雑化・高速化により、データや処理が複数システムにまたがることもあります。システムが多様化されることにより、一部に変更や障害が発生しても全体にはできる限り影響しないように、各システムの連携は“疎結合”であることが望まれています。そこで、これらの連携手段として「メッセージング」というものがあります。

 今回は、メッセージングに関連するJava標準のAPIやJBossのフレームワークについて説明します。

君に届け、「メッセージング」とは何か?

 メッセージングとは、ネットワーク上で情報を「メッセージ」という単位で扱い、特定のアプリケーション同士がメッセージでやりとりすることを指します。

RPCの同期処理

 通常の通信方法の1つとして、「RPC(Remote Procedure Call)」と呼ばれる方法があります。これは、送信側が受信側の関数やメソッドを呼び出すことで処理を行います。そのため、受信側の処理に時間がかかると、送信側はその処理が終わるまで次の処理に進めません。このように、送信側と受信側は同期的に処理を行うので、双方は1対1である必要があります。

 また呼び出す処理に関しては、関数名やメソッド名、引数などは静的に決められているので、送信側は受信側のインターフェイスなどを熟知する必要があります。このようにRPCは、「柔軟性に乏しい密結合である」といえます。そのため、例えば受信側に変更や障害が発生すると、送信側の処理にも影響が出てしまいます。

図1 RPCの同期処理
図1 RPCの同期処理

メッセージングの非同期処理

 それに対しメッセージングでは、送信側はメッセージを送信した後、処理結果を待たずに次の処理を行うので、非同期的に処理が行えます。そのため、必ずしも1対1である必要もなく、受信側の存在を知る必要もないので、たとえシステムに変更や障害が発生して受信側が、どのような状態であっても送信側は影響を回避しやすくなります。

図2 メッセージングの非同期処理
図2 メッセージングの非同期処理

 このように、メッセージングを用いることでシステム間を疎結合で連携できるようになり、結果的にシステムの柔軟性・障害に対する耐性を高めることにもつながります。

 このメッセージングを利用するには、Java言語では「JMS」というJava EEJ2EE)の標準APIがあります。こちらを使用すると、より高度なことを便利に使用できます。そこで、次はJMSについて説明したいと思います。

メッセージ指向ミドルウェアのJava標準API「JMS」とは

 JMSとは、「Java Message Service」の略で、Java EEで規定されているメッセージ指向ミドルウェアMOM)の標準APIです。昨今のWebシステムで、通信の仕組みとして利用されています。

 JMSでは、メッセージをアプリケーション間で非同期でやりとりする機構を提供します。またJMSは、「ポイント・ツー・ポイントPTP)」「パブリッシュ/サブスクライブPublisher-Subscriber)」のメッセージングモデルをサポートしており、システム構築に必要なクライアントインターフェイスを提供しています。

1対1のやりとりで使う「PTP」

 PTPは、送信側のアプリケーションが別の1つの受信側のアプリケーションにメッセージを送信できます。相手を特定した、1対1のやりとりです。1対1といっても、直接接続しメッセージをやりとりするのではなく、JMSのAPIを実装したJMSサーバを利用してメッセージをやりとりします。PTPのイメージ図3をご覧ください。

図3 PTPのイメージ図
図3 PTPのイメージ図

1対多でも使える「Publisher-Subscriber」

 Publisher-Subscriberは、アプリケーションが複数のアプリケーションにメッセージを送信できます。複数のアプリケーションで同じメッセージを受信できるので、メッセージに対する受信側のアプリケーションが1対1とは限らない場合に、適用できます。メッセージは、すべてのアプリケーションが受信するまで維持されます。Publisher-Subscriberのイメージ図4をご覧ください。

図4 Publisher-Subscriberのイメージ図
図4 Publisher-Subscriberのイメージ図

 ここまでで、読者の皆さんもメッセージングについて、多少イメージがわいてきたと思います。では、このようなメッセージングをJavaではどのようにして実装しているのでしょうか。次ページでは、代表的なミドルウェアとして「Apache ActiveMQ」「JBoss Messaging」などを紹介します。

1-2-3-4

 Index
第5回 非同期処理と疎結合ができる「メッセージング」の常識
Page1
君に届け、「メッセージング」とは何か?
メッセージ指向ミドルウェアのJava標準API「JMS」とは
  Page2
JMSのAPIを実装した代表的なミドルウェア
JBoss Messagingを使うための環境を構築
  Page3
JBoss Messagingは、こうやって実装する!
  Page4
メッセージングをサンプルで体感してみよう
メッセージングとも関連する「Webサービス」の常識



Java Solution全記事一覧

Java Solution フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
@IT Sepcial
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Sepcial
ソリューションFLASH