第3章 エンタープライズ統合パターンの導入
概要
Apache Camel の エンタープライズ統合パターン は、Gregor Hohpe および Bobby Woolf 両氏の著書である同名の書籍 Enterprise Integration Patterns の影響を受けています。両著者が説明するパターンは、エンタープライズ統合プロジェクトを開発するための優れたツールボックスを提供します。統合アーキテクチャーを説明するための共通の言語を提供する他に、Apache Camel のプログラミングインターフェイスと XML 設定を使用して、多くのパターンを直接実装することができます。
3.1. パターンの概要
書籍 Enterprise Integration Patterns
Apache Camel は、Gregor Hohpe および Bobby Woolf 両氏の著書である Enterprise Integration Patterns に記載されているほとんどのパータンをサポートします。
メッセージングシステム
表3.1「メッセージングシステム」 に記載されているメッセージングシステムパターンは、メッセージングシステムを構成する基本的な概念やコンポーネントを紹介します。
アイコン | 名前 | ユースケース |
---|---|---|
| メッセージチャネルによって接続された 2 つのアプリケーションはどのように情報を交換するか。 | |
| メッセージングを使用して単一のアプリケーションが別のアプリケーションと通信する方法。 | |
| アプリケーションがメッセージングチャネルに接続してメッセージを送受信する方法。 | |
| 独立性と柔軟性を維持しながら、メッセージで複雑な処理を行う方法。 | |
| 定義された条件のセットに応じてメッセージを異なるフィルターに渡すために、個々の処理ステップを切り離す方法。 | |
| メッセージングを使用して、異なるデータフォーマットを使用するシステムの間で通信を行う方法。 |
メッセージングチャネル
メッセージングチャネルは、メッセージングシステムで参加者の接続に使用される基本的なコンポーネントです。表3.2「メッセージングチャネル」 のパターンは、使用できる異なる種類のメッセージングチャネルを説明しています。
アイコン | 名前 | ユースケース |
---|---|---|
| 1 つの受信側のみがドキュメントの受信や呼び出しを実行するように、呼び出し側が確認する方法。 | |
| 送信側が対象のすべての受信側にブロードキャストする方法。 | |
| メッセージングシステムが配信できないメッセージの処理方法。 | |
| メッセージングシステムに障害が発生しても、送信側がメッセージを確実に配信する方法。 | |
| 独立し、分離したアプリケーションを連携でき、他のアプリケーションに影響を与えることなく 1 つ以上のアプリケーションを追加または削除できるアーキテクチャーとは。 |
メッセージの構築
表3.3「メッセージの構築」 のメッセージ構築パターンは、システムを通過するメッセージのさまざまな形式と関数を表しています。
アイコン | 名前 | ユースケース |
---|---|---|
| 受信した応答を生成したリクエストを、要求側が識別する方法。 | |
| 応答側が応答の送信先を認識する方法。 |
メッセージルーティング
表3.4「メッセージのルーティング」 のメッセージルーティングパターンは、メッセージチャネルをリンクするさまざまな方法を表しています。これには、メッセージのボディーを変更せずにメッセージストリームに適用できるさまざまなアルゴリズムが含まれます。
アイコン | 名前 | ユースケース |
---|---|---|
| 単一の論理関数 (Inventory 確認など) の実装が複数の物理システムに分散されている場合の処理方法。 | |
| コンポーネントが不必要なメッセージを受信しないようにする方法。 | |
| 動的に指定された受信者のリストにメッセージをルーティングする方法。 | |
| 各要素を異なる方法で処理しなければならない可能性がある、複数の要素が含まれるメッセージの処理方法。 | |
| 個別かつ関連するメッセージの結果を組み合わせ、全体として処理できるようにする方法。 | |
| 順序どおりでない関連するメッセージのストリームを正しい順序に戻す方法。 | |
| 要素ごとに異なる処理が必要となる可能性がある複数の要素で構成されるメッセージを処理する場合に、メッセージフロー全体を維持する方法。 | |
複数の受信者にメッセージを送信する必要があり、その各受信者が応答を送信する可能性がある場合に、メッセージフロー全体を維持する方法。 | ||
| 設計時にステップの順序が分からず、ステップの順序がメッセージごとに異なる可能性がある場合に、一連の処理ステップを通じてメッセージを継続的にルーティングする方法。 | |
メッセージのスロットリングによって、特定のエンドポイントがオーバーロードされないようにする方法、または外部サービスと合意した SLA を越えないようにする方法。 | ||
メッセージの送信を遅らせる方法。 | ||
複数のエンドポイント間で負荷を分散する方法。 | ||
外部サービスの呼び出し時に、Hystrix サーキットブレーカーを使用する方法。Camel 2.18 の新機能。 | ||
レジストリーでサービスを検索して、分散システムでリモートサービスを呼び出す方法。Camel 2.18 の新機能。 | ||
メッセージを同時に複数のエンドポイントにルーティングする方法。 | ||
メッセージをループで繰り返し処理する方法。 | ||
ダウンストリームルートをオーバーロードを防ぐために一定の期間で複数のメッセージから 1 つのメッセージをサンプリングする方法。 |
メッセージの変換
表3.5「メッセージ変換」 のメッセージ変換パターンは、さまざまな目的のためにメッセージの内容を変更する方法を表しています。
アイコン | 名前 | ユースケース |
---|---|---|
| メッセージの送信元に必要なデータ項目がすべてない場合に他のシステムと通信する方法。 | |
| 数個のデータ項目のみが必要な場合に大きなメッセージの処理を簡単にする方法。 | |
| 情報の内容を減らさずにシステム全体で送信されるメッセージのデータ量を減らす方法。 | |
| 意味的には同等で、受け取った形式が異なるメッセージの処理方法。 | |
メッセージのボディーのソート方法。 |
メッセージングエンドポイント
メッセージングエンドポイントは、メッセージングチャネルとアプリケーション間の接点を示します。表3.6「Messaging Endpoint」 のメッセージングエンドポイントパターンは、エンドポイントに設定できるサービスのさまざまな機能と特性を表しています。
アイコン | 名前 | ユースケース |
---|---|---|
ドメインオブジェクトとメッセージングインフラストラクチャーの間でデータを移動し、お互いに独立した状態を維持する方法。 | ||
| メッセージが利用できるようになったときにアプリケーションが自動的にメッセージを消費する方法。 | |
| アプリケーションの準備ができたときに、アプリケーションがメッセージを消費する方法。 | |
| メッセージングクライアントが複数のメッセージを同時に処理する方法。 | |
| 1 つのチャネルで複数のコンシューマーがメッセージ処理を調整する方法。 | |
| メッセージコンシューマーが受信するメッセージを選択する方法 | |
| サブスクライバーがメッセージをリッスンしていないときにメッセージの欠落を防ぐ方法。 | |
メッセージの受信側が重複メッセージを処理する方法。 | ||
| クライアントがメッセージングシステムでトランザクションを制御する方法。 | |
| 残りのアプリケーションからメッセージングシステムへのアクセスをカプセル化する方法。 | |
| サービスがさまざまなメッセージング技術や、メッセージング以外の技術によって呼び出されるように、アプリケーションで設計する方法。 |
システム管理
表3.7「システム管理」 のシステム管理パターンは、メッセージングシステムを監視、テスト、および管理する方法を表しています。
アイコン | 名前 | ユースケース |
---|---|---|
| ポイントツーポイントチャネルで送信されるメッセージを検査する方法。 |