Jakarta Messaging API(旧称Java Message ServiceまたはJMS API)は、メッセージ指向ミドルウェア用のJava アプリケーションプログラミングインターフェース(API)です。プロデューサー・コンシューマー問題を処理できる汎用メッセージングモデルを提供し、ソフトウェアシステム間のメッセージの送受信を容易にするために使用できます。[1] Jakarta MessagingはJakarta EEの一部であり、もともとはSun Microsystemsで開発された仕様によって定義され、その後Java Community Processによってガイドされました。[2]
メッセージングの一般的な考え方
メッセージングは疎結合の分散通信の一種で、この文脈では「通信」という用語はソフトウェア コンポーネント間のメッセージの交換として理解できます。メッセージ指向テクノロジは、中間コンポーネントを導入することで密結合の通信 ( TCPネットワークソケット、CORBA、RMIなど) を緩和しようとします。このアプローチにより、ソフトウェア コンポーネントは間接的に相互に通信できます。この利点には、メッセージの送信者が受信者について正確に知る必要がないことなどがあります。
メッセージングの利点としては、異種プラットフォームの統合、システムのボトルネックの削減、スケーラビリティの向上、変化への迅速な対応などが挙げられます。[3]
バージョン履歴
- JMS1.0 [4]
- JMS 1.0.1(1998年10月5日)[4]
- JMS 1.0.1a(1998年10月30日)[5] [6]
- JMS 1.0.2 (1999 年 12 月 17 日) [7]
- JMS 1.0.2a(1999年12月23日)[8]
- JMS 1.0.2b (2001 年 8 月 27 日) [9]
- JMS 1.1(2002年4月12日)[10]
- JMS 2.0(2013年5月21日)[11] [12]
- JMS 2.0a(2015年3月16日)[13] [14]
JMS 2.0は現在、Java Community Processの下でJSR 343としてメンテナンスされています。[15]
JMS 3.0はJakarta EEの一部として初期開発中です。[16]
要素
JMS要素は以下のとおりです。[17]
- JMSプロバイダー
- メッセージ指向ミドルウェア (MOM) 用の JMS インターフェイスの実装。プロバイダーは、Java JMS 実装または非 Java MOM へのアダプタとして実装されます。
- JMSクライアント
- メッセージを生成および/または受信するアプリケーションまたはプロセス。
- JMS プロデューサー/パブリッシャー
- メッセージを作成して送信する JMS クライアント。
- JMS コンシューマー/サブスクライバー
- メッセージを受信する JMS クライアント。
- JMSメッセージ
- JMS クライアント間で転送されるデータを格納するオブジェクト。
- JMSキュー
- 送信され、読み取りを待機しているメッセージ (1 人のコンシューマーのみ) を含むステージング領域。キューという名前が示すように、メッセージは送信順に配信されます。JMS キューは、各メッセージが 1 回だけ処理されることを保証します。
- JMSトピック
- 複数のサブスクライバーに配信されるメッセージを公開するための配信メカニズム。
モデル
JMS API は 2 つの異なるモデルをサポートしています。
- ポイントツーポイント
- パブリッシュ・アンド・サブスクライブ
ポイントツーポイントモデル
ポイントツーポイントメッセージング システムでは、メッセージは、受信メッセージのキューを管理する個々のコンシューマーにルーティングされます。このメッセージング タイプは、メッセージ キュー、送信者、受信者の概念に基づいています。各メッセージは特定のキューに宛てられ、受信クライアントは、メッセージを保持するために確立されたキューからメッセージを抽出します。任意の数のプロデューサーがキューにメッセージを送信できますが、各メッセージは 1 つのコンシューマーによって配信され、消費されることが保証されます。キューは、メッセージが消費されるか、メッセージの有効期限が切れるまで、送信されたすべてのメッセージを保持します。メッセージを消費するコンシューマーが登録されていない場合、キューは、コンシューマーがメッセージを消費するように登録するまでメッセージを保持します。
パブリッシュ・アンド・サブスクライブモデル
パブリッシュ アンド サブスクライブモデルは、特定のメッセージ「トピック」へのメッセージのパブリッシュをサポートします。サブスクライバーは、特定のメッセージ トピックでパブリッシュされたメッセージの受信に関心があることを登録できます。このモデルでは、パブリッシャーもサブスクライバーも互いのことを知りません。匿名掲示板がこれによく似ています。
- 0 人以上のコンシューマーがメッセージを受信します。
- パブリッシャーとサブスクライバーの間にはタイミングの依存関係があります。パブリッシャーは、クライアントがサブスクライブするためのメッセージ トピックを作成する必要があります。サブスクライバーは、永続的なサブスクリプションを確立していない限り、メッセージを受信するために継続的にアクティブである必要があります。その場合、サブスクライバーが接続されていない間にパブリッシュされたメッセージは、再接続するたびに再配布されます。
JMS は、データを提供するトランスポート層からアプリケーションを分離する方法を提供します。目的のプロバイダーのJava Naming and Directory Interface (JNDI) 情報を使用することで、同じ Javaクラスを使用してさまざまな JMS プロバイダーと通信できます。 クラスは最初に接続ファクトリを使用してキューまたはトピックに接続し、次にメッセージを作成して送信または公開します。 受信側では、クライアントがメッセージを受信またはサブスクライブします。
URI スキーム
RFC 6167 は、Java Message Service の
jms: URI スキームを定義します。
プロバイダーの実装
JMS を使用するには、セッション、キュー、トピックを管理できる JMS プロバイダーが必要です。Java EE バージョン 1.4 以降では、すべてのJava EE アプリケーション サーバーに JMS プロバイダーが含まれている必要があります。これは、そのバージョンで初めて利用可能になったJava EE コネクタ アーキテクチャのメッセージ インフロー管理を使用して実装できます。
一般的な JMS プロバイダーのリストは次のとおりです。
- Amazon SQSの Java メッセージングライブラリ
- Apache ActiveMQ クラシック
- Apache ActiveMQ アルテミス
- Apache Qpid、AMQPを使用[18]
- IBM MQ (旧称 MQSeries、その後 WebSphere MQ)
- IBM WebSphere Application Serverのサービス統合バス(SIBus)[19]
- JBossのJBoss メッセージングとHornetQ
- OW2コンソーシアムのJORAM
- Oracleからメッセージ キューを開く
- OpenJMS グループのOpenJMS
- Oracle WebLogic ServerおよびOracle AQ
- Solaceの PubSub+
- Pivotal SoftwareのRabbitMQ
- TIBCOエンタープライズメッセージサービス[20]
参照
- メッセージ駆動型Bean
- メッセージキュー— JMSの基礎となる概念
- サービス指向アーキテクチャ
- JMS API を実装してい
ないメッセージング テクノロジには次のものがあります。
- アドバンスト メッセージ キューイング プロトコル(AMQP) — 複数の独立した実装を持つ標準化されたメッセージ キュー プロトコル
- データ配信サービス(DDS) —オブジェクト管理グループ (OMG)が標準化したリアルタイム メッセージング システムで、パブリッシャーとサブスクライバー間の相互運用性が実証されている 10 以上の実装があります。
- Microsoft メッセージ キュー— .NET Framework用に実装された同様のテクノロジ
参考文献
- ^ Curry, Edward. 2004. 「メッセージ指向ミドルウェア」。Middleware for Communications、編者 Qusay H Mahmoud、1-28 ページ。イギリス、チチェスター: John Wiley and Sons。doi : 10.1002 /0470862084.ch1。ISBN 978-0-470-86206-3
- ^ 「JSR 914: Java Message Service (JMS) API」。Java Community Process プログラム。2018年7 月 31 日閲覧。
- ^ Richards 他、3 ~ 5 ページ。
- ^ ab 「Java Message Service」(PDF)。Sun Microsystems 。1998年10月5日。 1999年2月24日時点のオリジナルよりアーカイブ(PDF) 。 2018年7月31日閲覧。
- ^ 「Java Message Service Documentation」。Sun Microsystems。1998年10月30日。1999年2月24日時点のオリジナルよりアーカイブ。2018年7月31日閲覧。
- ^ 「Java Message Service Source - Version 1.0.1a」。Sun Microsystems。1998年10月29日。 2000年8月16日時点のオリジナル(ZIP)からアーカイブ。2018年7月31日閲覧。
- ^ 「Java Message Service」(PDF)。Sun Microsystems (1999 年 12 月 17 日発行)。1999 年 11 月 9 日。2000 年 8 月 23 日時点のオリジナルよりアーカイブ(PDF) 。2018年7 月 31 日閲覧。
- ^ 「Java Message Service Documentation」。Sun Microsystems。1999年12月23日。2000年2月29日時点のオリジナルよりアーカイブ。2018年7月31日閲覧。
- ^ 「Java Message Service」(PDF)。Sun Microsystems。2001年8月27日。2022年10月9日時点のオリジナルよりアーカイブ(PDF) 。2018年7月31日閲覧。
- ^ 「Java Message Service」(PDF)。Sun Microsystems。2002年4月12日。2022年10月9日時点のオリジナルよりアーカイブ(PDF) 。2018年7月31日閲覧。
- ^ 「Java Message Service」(PDF)。Oracle 。 2013年3月20日。 2022年10月9日時点のオリジナルよりアーカイブ(PDF) 。 2018年7月31日閲覧。
- ^ 「JMS 2.0 最終リリース」。Java Message Service 仕様。2017 年 6 月 9 日。2018 年7 月 31 日閲覧。
- ^ 「Java Message Service」(PDF)。Oracle。2015年3月10日。 2022年10月9日時点のオリジナルよりアーカイブ(PDF) 。 2018年7月31日閲覧。
- ^ 「JMS 2.0 errata release (Rev a)」。Java Message Service 仕様。2017 年 7 月 5 日。2018年7 月 31 日閲覧。
- ^ 「JSR 343: Java Message Service 2.0」。Java Community Process プログラム。2018年7 月 31 日閲覧。
- ^ Monson-Haefel, Richard (2018年12月6日). 「JMS 3.0: Get Involved!」. Tomitribe . 2020年7月17日閲覧。
- ^ Java メッセージ サービス (JMS)
- ^ 「Apache Qpid™: オープンソース AMQP メッセージング」。
- ^ Wallis, Graham. 「メッセージング システムの選択: WebSphere MQ と WebSphere Application Server サービス統合バス」IBM developerWorks。
- ^ 「TIBCO 製品ドキュメント - TIBCO エンタープライズ メッセージ サービス」。
さらに読む
- Richards, Mark; Richard Monson-Haefel; David A. Chappell (2009)。Java Message Service、第 2版。O'Reilly。ISBN 978-0-596-52204-9。
外部リンク
- 公式サイト
- JSR 343: Java メッセージ サービス 2.0
javax.jmsAPI Javadocドキュメント- Oracle の Java EE 7 JMS チュートリアル
- JMS プロバイダーの歴史的比較マトリックス
