第5章 メッセージングシステム

概要

本章では、エンドポイント、メッセージングチャネル、メッセージルーターなどの、メッセージングシステムの基本的な設定要素について紹介します。

5.1. メッセージ

概要

メッセージ とは、メッセージングシステムでデータを送信するための最小単位です (以下の図では灰色の丸で表されています)。複数のパーツが含まれるメッセージなどの場合、メッセージ自体に内部構造がある場合があります。これは、図5.1「Message パターン」 では灰色の丸とつながる図形で表されています。

図5.1 Message パターン

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);