第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「メッセージングシステム」 に記載されているメッセージングシステムパターンは、メッセージングシステムを構成する基本的な概念やコンポーネントを紹介します。

表3.1 メッセージングシステム

アイコン名前ユースケース

Message icon

図5.1「Message パターン」

メッセージチャネルによって接続された 2 つのアプリケーションはどのように情報を交換するか。

Message channel icon

図5.2「Message Channel パターン」

メッセージングを使用して単一のアプリケーションが別のアプリケーションと通信する方法。

Message endpoint icon

図5.3「Message Endpoint パターン」

アプリケーションがメッセージングチャネルに接続してメッセージを送受信する方法。

Pipes and filters icon

図5.4「Pipes and Filters パターン」

独立性と柔軟性を維持しながら、メッセージで複雑な処理を行う方法。

Message router icons

図5.7「Message Router パターン」

定義された条件のセットに応じてメッセージを異なるフィルターに渡すために、個々の処理ステップを切り離す方法。

Message translator icon

図5.8「Message Translator パターン」

メッセージングを使用して、異なるデータフォーマットを使用するシステムの間で通信を行う方法。

メッセージングチャネル

メッセージングチャネルは、メッセージングシステムで参加者の接続に使用される基本的なコンポーネントです。表3.2「メッセージングチャネル」 のパターンは、使用できる異なる種類のメッセージングチャネルを説明しています。

表3.2 メッセージングチャネル

アイコン名前ユースケース

Point to point icon

図6.1「Point to Point Channel パターン」

1 つの受信側のみがドキュメントの受信や呼び出しを実行するように、呼び出し側が確認する方法。

Publish subscribe icon

図6.2「Publish Subscribe Channel パターン」

送信側が対象のすべての受信側にブロードキャストする方法。

Dead letter icon

図6.3「Dead Letter Channel パターン」

メッセージングシステムが配信できないメッセージの処理方法。

Guaranteed delivery icon

図6.4「Guaranteed Delivery パターン」

メッセージングシステムに障害が発生しても、送信側がメッセージを確実に配信する方法。

Message bus icon

図6.5「Message Bus パターン」

独立し、分離したアプリケーションを連携でき、他のアプリケーションに影響を与えることなく 1 つ以上のアプリケーションを追加または削除できるアーキテクチャーとは。

メッセージの構築

表3.3「メッセージの構築」 のメッセージ構築パターンは、システムを通過するメッセージのさまざまな形式と関数を表しています。

表3.3 メッセージの構築

アイコン名前ユースケース

Correlation identifier icon

「概要」

受信した応答を生成したリクエストを、要求側が識別する方法。

Return address icon

「返信先アドレス」

応答側が応答の送信先を認識する方法。

メッセージルーティング

表3.4「メッセージのルーティング」 のメッセージルーティングパターンは、メッセージチャネルをリンクするさまざまな方法を表しています。これには、メッセージのボディーを変更せずにメッセージストリームに適用できるさまざまなアルゴリズムが含まれます。

表3.4 メッセージのルーティング

アイコン名前ユースケース

Content based router icon

「Content-Based Router」

単一の論理関数 (在庫確認など) の実装が複数の物理システムに分散されている場合の処理方法。

Message filter icon

「Message Filter」

コンポーネントが不必要なメッセージを受信しないようにする方法。

Recipient List icon

「受信者リスト」

動的に指定された受信者のリストにメッセージをルーティングする方法。

Splitter icon

「Splitter」

各要素を異なる方法で処理しなければならない可能性がある、複数の要素が含まれるメッセージの処理方法。

Aggregator icon

「Aggregator」

個別かつ関連するメッセージの結果を組み合わせ、全体として処理できるようにする方法。

Resequencer icon

「Resequencer」

順序どおりでない関連するメッセージのストリームを正しい順序に戻す方法。

distribution aggregate icon

「Composed Message Processor」

要素ごとに異なる処理が必要となる可能性がある複数の要素で設定されるメッセージを処理する場合に、メッセージフロー全体を維持する方法。

 

「Scatter-Gather」

複数の受信者にメッセージを送信する必要があり、その各受信者が応答を送信する可能性がある場合に、メッセージフロー全体を維持する方法。

Routing slip icon

「Routing Slip」

設計時にステップの順序が分からず、ステップの順序がメッセージごとに異なる可能性がある場合に、一連の処理ステップを通じてメッセージを継続的にルーティングする方法。

 

「Throttler」

メッセージのスロットリングによって、特定のエンドポイントがオーバーロードされないようにする方法、または外部サービスと合意した SLA を越えないようにする方法。

 

「Delayer」

メッセージの送信を遅らせる方法。

 

「Load Balancer」

複数のエンドポイント間で負荷を分散する方法。

 

「Hystrix」

外部サービスの呼び出し時に、Hystrix サーキットブレーカーを使用する方法。Camel 2.18 の新機能。

 

「Service Call」

レジストリーでサービスを検索して、分散システムでリモートサービスを呼び出す方法。Camel 2.18 の新機能。

 

「Multicast」

メッセージを同時に複数のエンドポイントにルーティングする方法。

 

「Loop」

メッセージをループで繰り返し処理する方法。

 

「Sampling」

ダウンストリームルートをオーバーロードを防ぐために一定の期間で複数のメッセージから 1 つのメッセージをサンプリングする方法。

メッセージの変換

表3.5「Message Transformation」 のメッセージ変換パターンは、さまざまな目的のためにメッセージの内容を変更する方法を表しています。

表3.5 Message Transformation

アイコン名前ユースケース

Content enricher icon

「Content Enricher」

メッセージの送信元に必要なデータ項目がすべてない場合に他のシステムと通信する方法。

Content filter icon

「Content Filter」

数個のデータ項目のみが必要な場合に大きなメッセージの処理を簡単にする方法。

store in library icon

「Claim Check EIP」

情報の内容を減らさずにシステム全体で送信されるメッセージのデータ量を減らす方法。

Normalizer icon

「ノーマライザー」

意味的には同等で、受け取った形式が異なるメッセージの処理方法。

 

「並び替え」

メッセージのボディーのソート方法。

メッセージングエンドポイント

メッセージングエンドポイントは、メッセージングチャネルとアプリケーション間の接点を示します。表3.6「Messaging Endpoint」 のメッセージングエンドポイントパターンは、エンドポイントに設定できるサービスのさまざまな機能と特性を表しています。

表3.6 Messaging Endpoint

アイコン名前ユースケース
 

「Messaging Mapper」

ドメインオブジェクトとメッセージングインフラストラクチャーの間でデータを移動し、お互いに独立した状態を維持する方法。

Event driven icon

「Event Driven Consumer」

メッセージが利用できるようになったときにアプリケーションが自動的にメッセージを消費する方法。

Polling consumer icon

「Polling Consumer」

アプリケーションの準備ができたときに、アプリケーションがメッセージを消費する方法。

Competing consumers icon

「Competing Consumers」

メッセージングクライアントが複数のメッセージを同時に処理する方法。

Message dispatcher icon

「Message Dispatcher」

1 つのチャネルで複数のコンシューマーがメッセージ処理を調整する方法。

Selective consumer icon

「Selective Consumer」

メッセージコンシューマーが受信するメッセージを選択する方法

Durable subscriber icon

「Durable Subscriber」

サブスクライバーがメッセージをリッスンしていないときにメッセージの欠落を防ぐ方法。

 

「Idempotent Consumer」

メッセージの受信側が重複メッセージを処理する方法。

Transactional client icon

「Transactional Client」

クライアントがメッセージングシステムでトランザクションを制御する方法。

Messaging gateway icon

「Messaging Gateway」

残りのアプリケーションからメッセージングシステムへのアクセスをカプセル化する方法。

Service activator icon

「Service Activator」

サービスがさまざまなメッセージング技術や、メッセージング以外の技術によって呼び出されるように、アプリケーションで設計する方法。

システム管理

表3.7「システム管理」 のシステム管理パターンは、メッセージングシステムを監視、テスト、および管理する方法を表しています。

表3.7 システム管理

アイコン名前ユースケース

Wire tap icon

12章システム管理

ポイントツーポイントチャネルで送信されるメッセージを検査する方法。