Enterprise Integration Patterns (EIP)は、GregorHohpeとBobbyWoolfによる本であり、 エンタープライズアプリケーション統合 とメッセージ指向ミドルウェアをパターン言語の形式で使用するための65のパターンについて説明しています。これらは、アプリケーションを統合するための標準化された方法を使用するのに役立ちます。問題が発生するたびに車輪の再発明を行う必要はありません。
エンタープライズ統合パターンの目標は、共通の言語と一連のワークフローアクションを作成して、それらを組み合わせて成熟した実用的なビジネスプロセスを作成することです。これは、企業向けの効果的なメッセージングソリューションの設計に役立つ65のパターンのカタログを提供します。
この本は、統合のための4つのトップレベルの選択肢を区別しています。
- ファイル転送
- 共有データベース
- リモートプロシージャコール
- メッセージング
次の統合タイプが導入されています。
- 情報ポータル
- データレプリケーション
- 共有ビジネス機能
- サービス指向アーキテクチャー
- 分散型ビジネスプロセス
- 企業間統合
- 密結合の相互作用と緩く結合した相互作用
無料のオンラインツールを使用してエンタープライズ統合パターン図を作成する
VisualParadigmの無料の EnterpriseIntegration Patternsツール (EIPダイアグラムツール)は、ドラッグアンドドロップや位置合わせガイドなどのダイアグラム作成をより簡単かつ高速にする一連の編集機能を備えており、編集をスムーズかつ直感的にします。EIPダイアグラムツールには、さまざまな種類のEIPダイアグラムを作成できる一連のEIPシンボルと図形も付属しています。

パターンを簡単に開発し、PNG、JPG、GIF、SVG、PDFなどの形式で出力して共有できます。
例とテンプレートを使用してEIPを学ぶ
空白の図またはEIPテンプレートから始めることができます。以下はテンプレートの一部です。[編集]ボタンをクリックして、すぐに編集を開始します。無料で、登録は必要ありません。
エンタープライズ統合パターンの例:スマートプロキシ

エンタープライズ統合パターンの例:合成メッセージングMSMQ

他のエンタープライズ統合パターンを採用したいですか?
EIPの実装フレームワーク
Apache Camelは 、GregorHohpeとBobbyWoolfによる優れた本の ほとんどの エンタープライズ統合パターンをサポートしています。エンタープライズ統合パターン(EIP)に基づいており、すぐに使用できるベストプラクティスを適用して統合の問題を解決できます。Camelは、GregorHohpeとBobbyWoolfによる優れた本のほとんどのエンタープライズ統合パターンと、 マイクロサービスアーキテクチャの新しい統合パターンをサポートしています。
Camelを初めて使用する場合は 、これらのパターンを実装する前に、ユーザーガイドの「はじめに」を試してみることをお勧めします。
メッセージングシステム

メッセージチャネル
メッセージングを使用して、あるアプリケーションが別のアプリケーションとどのように通信しますか?

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

独立性と柔軟性を維持しながら、メッセージに対して複雑な処理を実行するにはどうすればよいでしょうか。

一連の条件に応じてメッセージをさまざまなフィルターに渡すことができるように、個々の処理ステップをどのように分離できますか?

異なるデータ形式を使用するシステムは、メッセージングを使用してどのように相互に通信できますか?

アプリケーションはどのようにメッセージングチャネルに接続してメッセージを送受信しますか?
メッセージングチャネル

発信者は、正確に1人の受信者がドキュメントを受信するか、通話を実行することをどのように確認できますか?

送信者は、関心のあるすべての受信者にイベントをブロードキャストするにはどうすればよいですか?

メッセージングシステムは、配信できないメッセージをどのように処理しますか?

メッセージングシステムに障害が発生した場合でも、送信者はどのようにしてメッセージが配信されることを確認できますか?

アプリケーションをメッセージングシステムに接続して、メッセージを送受信できるようにするにはどうすればよいですか?

複数のメッセージングシステムを接続して、一方のメッセージをもう一方のメッセージでも利用できるようにするにはどうすればよいですか?

個別のアプリケーションを連携させながら、他のアプリケーションに影響を与えることなくアプリケーションを簡単に追加または削除できるように、分離された方法で動作できるようにするアーキテクチャとは何ですか?

データベースに加えられた変更をキャプチャしてデータを同期し、それらの変更を別のシステムに適用します。
メッセージの構築

メッセージングを使用して、あるアプリケーションから別のアプリケーションにイベントを送信するにはどうすればよいですか?

アプリケーションがメッセージを送信するとき、受信者からどのように応答を得ることができますか?

返信者はどのようにして返信の送信先を知るのですか?

返信を受け取ったリクエスターは、これがどのリクエストの返信であるかをどのようにして知ることができますか?

送信者は、メッセージが古くなったと見なされ、処理されるべきではない場合をどのように示すことができますか?
メッセージルーティング

単一の論理機能(在庫チェックなど)の実装が複数の物理システムに分散している状況をどのように処理しますか?

コンポーネントが興味のないメッセージを受信しないようにするにはどうすればよいですか?

効率を維持しながら、ルーターがすべての可能な宛先に依存することをどのように回避できますか?

(静的または動的に)指定された受信者のリストにメッセージをルーティングするにはどうすればよいですか?

メッセージに複数の要素が含まれている場合、メッセージをどのように処理できますか?各要素は異なる方法で処理する必要がありますか?

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

関連しているが順序が正しくないメッセージのストリームを正しい順序に戻すにはどうすればよいですか?

それぞれが異なる処理を必要とする可能性がある複数の要素で構成されるメッセージを処理するときに、メッセージフロー全体をどのように維持できますか?
メッセージを複数の受信者に送信する必要がある場合、それぞれが応答を送信する可能性がある場合、メッセージフロー全体をどのように維持しますか?

ステップのシーケンスが設計時に不明であり、メッセージごとに異なる可能性がある場合、一連の処理ステップを介してメッセージを連続してルーティングするにはどうすればよいですか?

必要なステップが設計時にわからず、連続していない可能性がある場合、メッセージを複数の処理ステップにルーティングするにはどうすればよいですか?

メッセージの宛先を送信者から切り離し、メッセージのフローを一元管理するにはどうすればよいですか?
特定のエンドポイントが過負荷にならないように、または外部サービスで合意されたSLAを超えないように、メッセージを調整するにはどうすればよいですか?
ダウンストリームルートが過負荷にならないように、特定の期間に多数のメッセージから1つのメッセージをサンプリングするにはどうすればよいですか?
メッセージの送信を遅らせるにはどうすればよいですか?
いくつかのエンドポイント間で負荷を分散するにはどうすればよいですか?
サービスが壊れた場合、どうすれば外部サービスの呼び出しを停止できますか?
ある種のサービスレジストリからサービスが検索される分散システムでリモートサービスを呼び出すにはどうすればよいですか?
キャメルルートで、正常に完了する(すべて)か、実行されない/補正されない一連の関連アクションを定義するにはどうすればよいですか?
メッセージを同時に複数のエンドポイントにルーティングするにはどうすればよいですか?
ループ内でメッセージの処理を繰り返すにはどうすればよいですか?
メッセージ変換

メッセージの発信者が必要なすべてのデータ項目を利用できない場合、別のシステムとどのように通信しますか?

少数のデータ項目のみに関心がある場合、大きなメッセージの処理をどのように簡素化しますか?

情報コンテンツを犠牲にすることなく、システム全体に送信されるメッセージのデータ量をどのように減らすことができますか?

意味的には同等であるが、異なる形式で到着するメッセージをどのように処理しますか?
メッセージの本文を並べ替えるにはどうすればよいですか?
メッセージを変更しない可能性のあるスクリプトを実行するにはどうすればよいですか?
メッセージを検証するにはどうすればよいですか?
エンドポイントのメッセージング
ドメインオブジェクトとメッセージングインフラストラクチャの間で、2つを互いに独立させたまま、どのようにデータを移動しますか?

メッセージが利用可能になったときに、アプリケーションはどのようにしてメッセージを自動的に消費できますか?

アプリケーションの準備ができたときに、アプリケーションはどのようにメッセージを消費できますか?

メッセージングクライアントはどのようにして複数のメッセージを同時に処理できますか?

1つのチャネル上の複数の消費者がメッセージ処理をどのように調整できますか?

メッセージコンシューマーは、受信するメッセージをどのように選択できますか?

サブスクライバーは、メッセージをリッスンしていないときにメッセージの欠落を回避するにはどうすればよいですか?
メッセージ受信者はどのようにして重複メッセージを処理できますか?

クライアントはメッセージングシステムとのトランザクションをどのように制御できますか?

アプリケーションの他の部分からのメッセージングシステムへのアクセスをどのようにカプセル化しますか?

アプリケーションは、さまざまなメッセージングテクノロジと非メッセージングテクノロジの両方を介して呼び出されるサービスをどのように設計できますか?
システムマネジメント

複数のプラットフォームと広い地理的領域に分散しているメッセージングシステムを効果的に管理するにはどうすればよいでしょうか。

検証、テスト、またはデバッグ機能を実行するための中間ステップを介してメッセージをどのようにルーティングできますか?

ポイントツーポイントチャネルで送信されるメッセージをどのように検査しますか?
疎結合システムでメッセージのフローを効果的に分析およびデバッグするにはどうすればよいですか?
メッセージの処理をログに記録するにはどうすればよいですか?
ステップは、一連のEIPをグループ化して、メトリックと監視のための複合論理ユニットにします。