前幾天有人問了我一個問題。他們聽說過 Apache Camel,但不確定是否應該使用它。這個人問我“什么時候應該使用 Apache Camel?”。多么好的問題啊!所以我想總結一下我所知道的:什么時候應該使用 Camel?什么時候你應該不使用它呢?以及人們和公司如何在現實世界中使用 Apache Camel?
Apache Camel 是一個 Java 集成框架。它最適用於您希望從文件或應用程序中獲取數據、對其進行處理並將其與其他數據組合,然后將其移動到另一個應用程序的情況。
當您處理需要在系統之間共享的數據時,Apache Camel 是一個不錯的選擇。當您將數據存儲在不同的應用程序中時,就會發生這種情況。例如,人事檔案可能存儲在 HR 系統中,但需要與財務共享才能處理每月工資單。Camel 充當應用程序之間的這種編程粘合劑,用 Java 實現。
您是否想知道是否應該在自己的項目中采用 Apache Camel?繼續閱讀以了解更多信息,以及它適合哪種項目。
什么是阿帕奇駱駝?
Camel 以一組庫和組件以及一種語言(稱為
每當您需要從應用程序中提取數據、重新混合、合並並將其路由到其他地方時,您都可以使用 Camel。Camel 通過提供:
-
一種用於編寫數據流的語言(DSL),在 Camel中稱為
-
一組的patterns (模式)實施的錯誤處理和改造共性的東西,它可以添加到您的駱駝路線
-
一
-
運行您的集成的可嵌入runtime(運行時)(“Camel 上下文”)
Camel 作為一組庫(JAR 文件)分發,並在開源 Apache 許可證下發布,在 Apache 軟件基金會下。
什么時候應該使用 Apache Camel?
我發現當您想要使用 Apache Camel 時,有幾個主要的驅動程序:
與駱駝同行
-
將應用程序集成在一起: Camel 適用於需要在不同協議和應用程序(如文件、電子郵件、API 或 Web 應用程序)之間移動數據的情況。
當您想要在其 200 多個組件支持的任何一種應用程序和協議之間移動數據時,您可以使用 Apache Camel。Camel 中的組件通常都以類似的方式工作。因此,一旦您了解了如何使用一個組件,您就會發現使用其他組件會更容易。Camel 包含許多不同應用程序的組件,從 Facebook 和 Twitter,到 Salesforce 和 Workday。您還可以編寫自己的自定義組件。
-
基於模式的開發:許多常見的集成需求——比如支持事務或轉換——通常在代碼中計划和編寫很復雜。但是 Camel 提供了許多這些,並且通常只需輕彈一下開關即可啟用(好吧,只需更改一個變量!)。Camel 為以下內容提供模式和功能:
-
基於內容路由數據,使用 Camel 的
-
處理錯誤、事務和回滾
-
轉換數據
-
緩存經常訪問的數據
-
加密和認證
這些只是Camel 可以做的一些事情的例子。
這些要求在 Camel 中變得更容易,因為它以一組
當您需要連接分布式系統時,這種模式工具箱可以使 Camel 成為編寫集成粘合代碼的一種非常高效的方式。
-
-
許多集成的一種高級樣式:一旦您了解了基本模式以及如何使用 Camel 組件,您就會發現在 Camel 中制作許多集成變得很容易。
這是 Camel 的一個優勢:能夠相當快地創建許多集成。如果您正在開發一組集成,並且您希望它們都以類似的方式進行開發,那么 Camel 是理想的選擇。在大型公司中,這可能是非常有吸引力的選擇,因為它有助於選擇一種開發團隊共享和理解的方法。
-
處理數據,尤其是 Java 對象:由於它是一個 Java 框架,因此特別擅長處理 Java 對象。因此,如果您正在使用可以反序列化為 Java 對象的文件格式(許多文件格式可以轉換為 Java 對象,例如 XML、JSON……),那么 Camel 可以輕松處理。
人們如何在現實世界中使用 Camel?
有哪些現實世界的例子?駱駝在野外如何使用?
這只是我見過或參與過的一小部分項目。在每個項目中,公司都在使用 Camel 來實現某個目標。我還在括號中包含了相關技術:
駱駝的廣闊世界
-
處理和路由數據:處理客戶訂單並將它們路由到數據庫(Camel on Spring Boot with ActiveMQ Artemis 和 Qpid Dispatch Router)
-
處理網絡提交的數據:接收和處理/轉換農業調查表格,然后插入數據庫(Apache Karaf 上的 Camel)
-
使用消息隊列處理金融交易:處理金融交易並將它們路由到正確的部門(Apache Karaf 上的 Camel)
-
將網關放在 API 前面:實現輕量級 API 網關,該網關對消息進行身份驗證並將其路由到正確的 API(Spring Boot 上的 Apache Camel)
-
數據分發:輪詢 SaaS 應用程序中 HR 數據的更改,並將更改分發到許多下游應用程序和文件(Kubernetes 上 Spring Boot 上的 Apache Camel)
-
后端訂單處理:處理汽車訂單和汽車服務請求(Apache Camel on Spring Boot、Kubernetes)
-
對遺留 API 進行現代化改造:將來自遺留 ERP 系統的數據作為 REST API 公開,以便客戶端可以使用它(Spring Boot 上的 Apache Camel,Kubernetes 上)
-
臨時數據處理:每天從數據庫中的數據生成銷售報告(Spring Boot 上的 Apache Camel)
通常,Camel 的最佳用例是您擁有要從中使用的數據源(例如隊列中的傳入消息,或從 API 獲取數據)以及要將數據發送到的目標。
你什么時候不應該使用它?
那么什么時候不應該使用 Camel 呢?凡事都有時間和地點,我認為 Camel 很棒,但它不能做到這一切:
-
對於繁重的數據轉換:雖然 Camel 非常擅長連接許多不同的應用程序,但它並不是為繁重的數據轉換和分析而設計的。如果您有一個數據量很大的工作流,您需要對數據進行大量密集的合並和處理——例如批處理或 ETL——那么我認為還有其他工具更適合這項工作。
但是,Camel 仍然擅長將多個步驟編排成一個流程。因此,您可能仍會考慮使用 Camel 作為數據轉換過程的協調器。
-
如果您只需要編寫一個集成“流程”..: Camel 相當輕量級,並且在最近的版本(3.x 及更高版本)中變得更加輕量級。但是,如果您只需要它來編寫一個集成,那么學習所有模式和整個 Camel 集成開發方法可能並不值得。如果您只需要編寫一個集成流程,那么您最好自己編寫集成代碼。
-
如果您在團隊中沒有任何 Java 技能:由於 Camel 是一個 Java 框架,因此需要一些 Java 知識才能使用它。如果您使用基於 XML 的 DSL(語言)來配置它,則不需要太多,但是擁有一些 Java 知識來理解概念仍然有幫助,因為它通常運行在 Java 虛擬機 (JVM) 上。這些知識特別有用,因此您可以在出現問題時進行故障排除:知道如何讀取堆棧跟蹤總是派上用場!
您如何使用 Apache Camel 創建應用程序?
Apache Camel 是免費和開源的。Camel 入門通常涉及創建一個包含 Camel 的新 Java 應用程序,或者將其添加到您現有的 Java 應用程序中。
Camel 可以通過多種不同的方式部署:
-
嵌入在 Spring Boot 應用程序和微服務中
-
嵌入 Quarkus 應用程序中,用於無服務器和容器
-
嵌入在 Apache Tomcat 中
-
部署到 Apache Karaf,OSGi 容器
-
部署到 WildFly,Java 應用程序服務器
-
使用
-
作為帶有方法的簡單、
首先,您將 Apache Camel 依賴項添加到您的應用程序,創建一個 Camel 上下文,在 Camel 的 DSL(Java 或 XML)中編寫您的集成路由,然后啟動該上下文。
創建和運行簡單的 Camel 應用程序的一個好方法是閱讀
一旦您開發了基於 Camel 的集成應用程序,您就可以將其部署到您的服務器、虛擬機或雲環境中。
使用 Camel 的最終想法
Camel 是一個很棒的集成框架,我真的很喜歡使用它。它特別適用於應用程序集成——這意味着如果您需要在應用程序之間使用、轉換和路由數據,它是很好的。
Apache Camel 在今天的雲時代更加重要,在這個時代,典型企業中的應用程序數量似乎越來越大。
所以我希望您發現本指南很有用,現在您知道何時使用 Apache Camel!