前几天有人问了我一个问题。他们听说过 Apache Camel,但不确定是否应该使用它。这个人问我“什么时候应该使用 Apache Camel?”。多么好的问题啊!所以我想总结一下我所知道的:什么时候应该使用 Camel?什么时候你应该不使用它呢?以及人们和公司如何在现实世界中使用 Apache Camel?
Apache Camel 是一个 Java 集成框架。它最适用于您希望从文件或应用程序中获取数据、对其进行处理并将其与其他数据组合,然后将其移动到另一个应用程序的情况。
当您处理需要在系统之间共享的数据时,Apache Camel 是一个不错的选择。当您将数据存储在不同的应用程序中时,就会发生这种情况。例如,人事档案可能存储在 HR 系统中,但需要与财务共享才能处理每月工资单。Camel 充当应用程序之间的这种编程粘合剂,用 Java 实现。
您是否想知道是否应该在自己的项目中采用 Apache Camel?继续阅读以了解更多信息,以及它适合哪种项目。
什么是阿帕奇骆驼?
Apache Camel是一个用 Java 编写的集成工具包或框架。
Camel 以一组库和组件以及一种语言(称为DSL)的形式出现,用于描述您希望如何在应用程序之间移动数据。您可以将它添加到现有的 Java 应用程序中,也可以在独立的 Java 应用程序中运行它。
每当您需要从应用程序中提取数据、重新混合、合并并将其路由到其他地方时,您都可以使用 Camel。Camel 通过提供:
-
一种用于编写数据流的语言(DSL),在 Camel中称为路由
-
一组的patterns (模式)实施的错误处理和改造共性的东西,它可以添加到您的骆驼路线
-
一组 300 多个组件,用于连接数百种不同的应用程序和协议
-
运行您的集成的可嵌入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 应用程序服务器
-
使用Camel-K在 Kubernetes 上本地运行
-
作为带有方法的简单、独立的 Java 应用程序
main()
首先,您将 Apache Camel 依赖项添加到您的应用程序,创建一个 Camel 上下文,在 Camel 的 DSL(Java 或 XML)中编写您的集成路由,然后启动该上下文。
创建和运行简单的 Camel 应用程序的一个好方法是阅读我的 Camel 教程,然后查看GitHub 上的Camel 示例存储库,其中包含有用的示例应用程序供您学习。
一旦您开发了基于 Camel 的集成应用程序,您就可以将其部署到您的服务器、虚拟机或云环境中。
使用 Camel 的最终想法
Camel 是一个很棒的集成框架,我真的很喜欢使用它。它特别适用于应用程序集成——这意味着如果您需要在应用程序之间使用、转换和路由数据,它是很好的。
Apache Camel 在今天的云时代更加重要,在这个时代,典型企业中的应用程序数量似乎越来越大。
所以我希望您发现本指南很有用,现在您知道何时使用 Apache Camel!当您需要考虑如何集成和处理来自应用程序的数据时,为什么不试试 Camel?