Enterprise Integration Patterns (EIP)是 Gregor Hohpe 和 Bobby Woolf 的一本書,以模式語言的形式描述了 65 種用於使用 企業應用程序集成 和麵向消息的中間件的模式。它們幫助我們使用標準化的方式來集成應用程序,而無需在每次遇到問題時都重新發明輪子。
企業集成模式的目標是創建一種通用語言和一組工作流操作,以便將它們組合在一起以創建成熟、實用的業務流程。它提供了一個包含 65 種模式的目錄,可幫助您為您的企業設計有效的消息傳遞解決方案。
本書區分了四種頂級集成替代方案:
- 文件傳輸
- 共享數據庫
- 遠程過程調用
- 消息傳遞
引入了以下集成類型:
- 信息門戶
- 數據複製
- 共享業務功能
- 面向服務的架構
- 分佈式業務流程
- 企業對企業整合
- 緊耦合交互與松耦合交互
使用免費在線工具繪製企業集成模式圖
Visual Paradigm 的免費 企業集成模式工具 (EIP 圖表工具)具有一組編輯功能,使繪圖更簡單、更快捷,例如拖放和對齊指南,使編輯變得流暢和直觀。EIP 圖表工具還附帶一組 EIP 符號和形狀,可讓您創建不同類型的 EIP 圖表。

您可以輕鬆地開發您的模式,然後通過 PNG、JPG、GIF、SVG 和 PDF 等格式輸出和共享它們。
通過示例和模板學習 EIP
您可以從空白圖表或 EIP 模板開始。以下是一些模板。單擊“編輯”按鈕立即開始編輯。它是免費的,無需註冊。
企業集成模式示例:智能代理

企業集成模式示例:組合消息傳遞 MSMQ

想採用其他一些企業集成模式嗎?
來自 Visual Paradigm的EIP 在線編輯存儲庫
生態工業園區實施框架
Apache Camel 支持 Gregor Hohpe 和 Bobby Woolf 的優秀著作中的大多數 企業集成模式 。基於企業集成模式 (EIP) 通過應用開箱即用的最佳實踐來幫助您解決集成問題。Camel 支持 Gregor Hohpe 和 Bobby Woolf 的優秀著作中的大多數企業集成模式,以及來自 微服務架構的更新集成模式。
如果您是 Camel 的新手,您可能想在嘗試實現這些模式之前嘗試用戶指南中的 入門 。
消息系統

留言頻道
一個應用程序如何使用消息傳遞與另一個應用程序通信?

信息
通過消息通道連接的兩個應用程序如何交換一條信息?

我們如何在保持獨立性和靈活性的同時對消息進行複雜的處理?

如何解耦各個處理步驟,以便根據一組條件將消息傳遞給不同的過濾器?

使用不同數據格式的系統如何使用消息傳遞相互通信?

應用程序如何連接到消息傳遞通道以發送和接收消息?
消息渠道

呼叫者如何確定只有一位接收者會收到文件或執行呼叫?

發送者如何向所有感興趣的接收者廣播事件?

消息傳遞系統將如何處理它無法傳遞的消息?

即使消息系統發生故障,發件人如何確保消息將被傳遞?

如何將應用程序連接到消息傳遞系統以便它可以發送和接收消息?

如何連接多個消息傳遞系統,以便在一個消息系統上可用的消息也可以在其他消息系統上可用?

什麼樣的架構能夠使不同的應用程序一起工作,但以一種解耦的方式,以便可以輕鬆地添加或刪除應用程序而不影響其他應用程序?

通過捕獲對數據庫所做的更改來同步數據,並將這些更改應用到另一個系統。
消息構造

如何使用消息傳遞將事件從一個應用程序傳輸到另一個應用程序?

當應用程序發送消息時,它如何獲得接收者的響應?

回复者如何知道將回復發送到哪裡?

收到回复的請求者如何知道這是針對哪個請求的回复?

發件人如何指示何時應將消息視為陳舊並因此不應處理?
消息路由

我們如何處理單個邏輯功能(例如,庫存檢查)的實現分佈在多個物理系統中的情況?

組件如何避免接收到無趣的消息?

如何在保持效率的同時避免路由器對所有可能的目的地的依賴?

我們如何將消息路由到(靜態或動態)指定收件人列表?

如果消息包含多個元素,我們如何處理它,每個元素都可能需要以不同的方式處理?

我們如何組合單個但相關消息的結果,以便將它們作為一個整體進行處理?

我們如何才能將相關但無序的消息流恢復到正確的順序?

在處理由多個元素組成的消息時,如何維護整個消息流,每個元素可能需要不同的處理?
當一條消息需要發送給多個收件人時,您如何維護整個消息流,每個收件人都可能會發送回复?

當步驟順序在設計時未知並且可能因每條消息而異時,我們如何通過一系列處理步驟連續路由消息?

當所需的步驟在設計時可能不知道並且可能不是連續的時,我們如何通過多個處理步驟路由消息?

如何將消息的目的地與發送者分離並保持對消息流的集中控制?
如何限制消息以確保特定端點不會超載,或者我們不會超過某些外部服務商定的 SLA?
如何在給定時間內從多條消息中抽取一條消息以避免下游路由不過載?
如何延遲發送消息?
如何在多個端點之間平衡負載?
如果服務中斷,我如何停止調用外部服務?
如何在從某種服務註冊表中查找服務的分佈式系統中調用遠程服務?
如何在 Camel 路線中定義一系列相關操作,這些操作應該成功完成(全部)或不執行/補償?
如何將消息同時路由到多個端點?
如何在循環中重複處理消息?
消息轉換

如果消息發起者沒有可用的所有必需數據項,我們如何與另一個系統通信?

當您只對少數數據項感興趣時,如何簡化對大消息的處理?

我們如何在不犧牲信息內容的情況下減少跨系統發送的消息的數據量?

您如何處理語義上等效但以不同格式到達的消息?
如何對郵件正文進行排序?
如何執行可能不會更改消息的腳本?
如何驗證消息?
消息傳遞端點
您如何在域對象和消息傳遞基礎架構之間移動數據,同時保持兩者相互獨立?

應用程序如何在消息可用時自動使用它們?

當應用程序準備就緒時,應用程序如何使用消息?

消息傳遞客戶端如何同時處理多個消息?

單個通道上的多個消費者如何協調他們的消息處理?

消息消費者如何選擇它希望接收的消息?

訂閱者如何在不收聽消息時避免丟失消息?
消息接收者如何處理重複消息?

客戶端如何控制其與消息傳遞系統的事務?

您如何封裝從應用程序的其餘部分對消息傳遞系統的訪問?

應用程序如何設計一項服務,以便通過各種消息傳遞技術和非消息傳遞技術調用?
系統管理

我們如何有效地管理分佈在多個平台和廣泛地理區域的消息傳遞系統?

如何通過中間步驟路由消息以執行驗證、測試或調試功能?

您如何檢查在點對點通道上傳輸的消息?
我們如何有效地分析和調試松耦合系統中的消息流?
如何記錄處理消息?
Steps 將一組 EIP 組合成一個組合邏輯單元,用於度量和監控。