第5章 メッセージングシステム
概要
本章では、エンドポイント、メッセージングチャネル、メッセージルーターなどの、メッセージングシステムの基本的な設定要素について紹介します。
5.1. メッセージ
概要
メッセージ とは、メッセージングシステムでデータを送信するための最小単位です (以下の図では灰色の丸で表されています)。複数のパーツが含まれるメッセージなどの場合、メッセージ自体に内部構造がある場合があります。これは、図5.1「Message パターン」 では灰色の丸とつながる図形で表されています。
図5.1 Message パターン
メッセージのタイプ
Apache Camel は以下のメッセージタイプを定義します。
- In メッセージ: コンシューマーエンドポイントからプロデューサーエンドポイントへのルートを通過するメッセージ (通常はメッセージのエクスチェンジを開始します)。
- out メッセージ: プロデューサーエンドポイントからコンシューマーエンドポイントに戻るルートを通過するメッセージ (通常は In メッセージの応答になります)。
これらのメッセージタイプはすべて、org.apache.camel.Message
インターフェイスによって内部的に表されます。
メッセージの構造
デフォルトでは、Apache Camel は以下の構造をすべてのメッセージタイプに適用します。
- ヘッダー: メッセージから抽出されたメタデータまたはヘッダーデータが含まれます。
- ボディー: 通常、メッセージ全体が元の形式で含まれます。
- アタッチメント: メッセージの添付 (JBI などの特定のメッセージングシステムとの統合に必要です)。
ヘッダー、ボディー、およびアタッチメントに分割することはメッセージの抽象モデルであることを覚えておくことが重要です。Apache Camel は、さまざまなメッセージ形式を生成するさまざまなコンポーネントをサポートします。最終的には、メッセージのヘッダーおよびボディーに何を配置するかを決定する基盤のコンポーネント実装です。
メッセージの関連付け
Apache Camel は内部的に、個別のメッセージの関連付けに使用されるメッセージ ID を記憶します。ただし、Apache Camel がメッセージを照合する最も重要な方法は エクスチェンジ オブジェクトを介して行われます。
エクスチェンジオブジェクト
エクスチェンジオブジェクトは、関連するメッセージのコレクションをカプセル化するエンティティーで、関連するメッセージのコレクションは メッセージエクスチェンジ と呼ばれ、メッセージのシーケンスを制御するルールは 交換パターン と呼ばれます。たとえば、一般的な交換パターンには、一方向イベントメッセージ (In メッセージ 1 つで設定) と、リクエスト-リプライエクスチェンジ (In メッセージ 1 つと、それに続く Out メッセージで設定) の 2 つがあります。
メッセージへのアクセス
Java DSL でルーティングルールを定義する場合、以下の DSL ビルダーメソッドを使用してメッセージのヘッダーとボディーにアクセスできます。
-
header(String name)
、body()
- 現行の In メッセージの名前付きヘッダーとボディーを返します。 -
outBody()
: 現在の Out メッセージのボディーを返します。
たとえば、In メッセージの username
ヘッダーを設定するには、以下の Java DSL ルートを使用できます。
from(SourceURL).setHeader("username", "John.Doe").to(TargetURL);