企業向けアプリケーションのさまざまな“常識”をJavaのオープンソース・フレームワーク群である「JBoss」から学んでいきましょう。企業システムを構築するうえでの基礎となる知識をリファレンス感覚で説明していきます。初心者から中堅、ベテランまで大歓迎!
企業システムでは、さまざまなデータを使ってさまざまな処理が行われています。また、システムの複雑化・高速化により、データや処理が複数システムにまたがることもあります。システムが多様化されることにより、一部に変更や障害が発生しても全体にはできる限り影響しないように、各システムの連携は“疎結合”であることが望まれています。そこで、これらの連携手段として「メッセージング」というものがあります。
今回は、メッセージングに関連するJava標準のAPIやJBossのフレームワークについて説明します。
メッセージングとは、ネットワーク上で情報を「メッセージ」という単位で扱い、特定のアプリケーション同士がメッセージでやりとりすることを指します。
通常の通信方法の1つとして、「RPC(Remote Procedure Call)」と呼ばれる方法があります。これは、送信側が受信側の関数やメソッドを呼び出すことで処理を行います。そのため、受信側の処理に時間がかかると、送信側はその処理が終わるまで次の処理に進めません。このように、送信側と受信側は同期的に処理を行うので、双方は1対1である必要があります。
また呼び出す処理に関しては、関数名やメソッド名、引数などは静的に決められているので、送信側は受信側のインターフェイスなどを熟知する必要があります。このようにRPCは、「柔軟性に乏しい密結合である」といえます。そのため、例えば受信側に変更や障害が発生すると、送信側の処理にも影響が出てしまいます。
それに対しメッセージングでは、送信側はメッセージを送信した後、処理結果を待たずに次の処理を行うので、非同期的に処理が行えます。そのため、必ずしも1対1である必要もなく、受信側の存在を知る必要もないので、たとえシステムに変更や障害が発生して受信側が、どのような状態であっても送信側は影響を回避しやすくなります。
このように、メッセージングを用いることでシステム間を疎結合で連携できるようになり、結果的にシステムの柔軟性・障害に対する耐性を高めることにもつながります。
このメッセージングを利用するには、Java言語では「JMS」というJava EE(J2EE)の標準APIがあります。こちらを使用すると、より高度なことを便利に使用できます。そこで、次はJMSについて説明したいと思います。
JMSとは、「Java Message Service」の略で、Java EEで規定されているメッセージ指向ミドルウェア(MOM)の標準APIです。昨今のWebシステムで、通信の仕組みとして利用されています。
JMSでは、メッセージをアプリケーション間で非同期でやりとりする機構を提供します。またJMSは、「ポイント・ツー・ポイント(PTP)」「パブリッシュ/サブスクライブ(Publisher-Subscriber)」のメッセージングモデルをサポートしており、システム構築に必要なクライアントインターフェイスを提供しています。
PTPは、送信側のアプリケーションが別の1つの受信側のアプリケーションにメッセージを送信できます。相手を特定した、1対1のやりとりです。1対1といっても、直接接続しメッセージをやりとりするのではなく、JMSのAPIを実装したJMSサーバを利用してメッセージをやりとりします。PTPのイメージ図3をご覧ください。
Publisher-Subscriberは、アプリケーションが複数のアプリケーションにメッセージを送信できます。複数のアプリケーションで同じメッセージを受信できるので、メッセージに対する受信側のアプリケーションが1対1とは限らない場合に、適用できます。メッセージは、すべてのアプリケーションが受信するまで維持されます。Publisher-Subscriberのイメージ図4をご覧ください。
ここまでで、読者の皆さんもメッセージングについて、多少イメージがわいてきたと思います。では、このようなメッセージングをJavaではどのようにして実装しているのでしょうか。次ページでは、代表的なミドルウェアとして「Apache ActiveMQ」「JBoss Messaging」などを紹介します。
Copyright © ITmedia, Inc. All Rights Reserved.