3. メッセージ (データ)
このセクションでは、JMS 1.1 で定められている、メッセージのタイプとメッセージ セレクション機能について説明します。
メッセージのタイプ
メッセージ セレクション (ルーティング)
3.1 メッセージ (データ) のタイプ
JMS では、メッセージのフォーマットについて規定し、JMS クライアントや JMS サーバーがどのようなプラットフォーム環境で実行されていても共通したインタフェースでメッセージを扱えるようにしています。
個々のメッセージは、ヘッダ部、プロパティ部、ボディ部 (ペイロード) の 3 つで構成されています。
メッセージ データの本体であるボディ部 (ペイロード) には、次の形式のデータを格納することができます。
- ストリーム形式 (Java のプリミティブ データ型のストリーム データ)
- マップ形式 (データ名とその値が対になったデータ (Java のプリミティブ データ型))
- テキスト形式 (ストリング型のデータ。XML データもこの形式で扱える)
- バイト形式 (アプリケーション特有の形式を持つバイト ストリーム)
- オブジェクト形式 (シリアライズ可能な Java オブジェクトをデータとして扱う)
ボディ部 (ペイロード) がないメッセージも可能で、シンプルなイベント通知に利用します。
3.2 メッセージ セレクション (ルーティング)
メッセージング アプリケーションでは、あるメッセージをそれを必要とするコンシューマのみに配信し、必要としないコンシューマには配信しないということが、しばしば求められます。
このようなメッセージ フィルタリング機能として、JMS 仕様では、メッセージのプロパティ ヘッダーに記述した値によってメッセージのフィルタリングを行う、メッセージ セレクタ機能が定義されています。
しかしながら、JMS 仕様のメッセージ セレクタでは、フィルタリング条件の設定がときに困難なものとなってしまいます。
- メッセージ プロパティに記述する 1 種類の値でフィルタリング条件を設定しなければならない
- さほど複雑でないフィルタリング条件でも、プロパティに記述する値の決定には非常に複雑なアルゴリズムが必要となり、プロデューサの開発負荷、処理負荷が多大なものとなってしまう
FioranoMQ では、メッセージ ボディ (データ本体) に XML データをおくことができます。この XML のタグ構造を利用してメッセージ データの内容を判別し、フィルタリングを行う、CBR (コンテンツ ベース ルーティング) の機能を設けることとしました。
CBR では、セレクタ プロパティ値のような新たな付加情報を生成する必要がなくなり、フィルタリング条件が柔軟に設定できるようになります。
CBR (コンテンツ ベース ルーティング) の詳細説明
|