什么时候应该使用 Apache Camel?

前几天有人问了我一个问题。他们听说过 Apache Camel,但不确定是否应该使用它。这个人问我“什么时候应该使用 Apache Camel?”。多么好的问题啊!所以我想总结一下我所知道的:什么时候应该使用 Camel?什么时候你应该使用它呢?以及人们和公司如何在现实世界中使用 Apache 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 时,有几个主要的驱动程序:

什么时候应该使用 Apache Camel?_应用程序_02

                         与骆驼同行

  • 将应用程序集成在一起: Camel 适用于需要在不同协议和应用程序(如文件、电子邮件、API 或 Web 应用程序)之间移动数据的情况。

    当您想要在其 200 多个组件支持的任何一种应用程序和协议之间移动数据时,您可以使用 Apache Camel。Camel 中的组件通常都以类似的方式工作。因此,一旦您了解了如何使用一个组件,您就会发现使用其他组件会更容易。Camel 包含许多不同应用程序的组件,从 Facebook 和 Twitter,到 Salesforce 和 Workday。您还可以编写自己的自定义组件。

  • 基于模式的开发:许多常见的集成需求——比如支持事务或转换——通常在代码中计划和编写很复杂。但是 Camel 提供了许多这些,并且通常只需轻弹一下开关即可启用(好吧,只需更改一个变量!)。Camel 为以下内容提供模式和功能:

    • 基于内容路由数据,使用 Camel 的基于内容的路由

    • 处理错误、事务和回滚

    • 转换数据

    • 缓存经常访问的数据

    • 加密和认证

    这些只是Camel 可以做的一些事情的例子。

    这些要求在 Camel 中变得更容易,因为它以一组模式的形式提供这些功能,称为企业集成模式(以同名书籍命名)。您可以将这些企业集成模式中的任何一种“现成”,并在您的代码中使用它们,而不必每次需要这些功能时都编写自己的解决方案。

    当您需要连接分布式系统时,这种模式工具箱可以使 Camel 成为编写集成粘合代码的一种非常高效的方式。什么时候应该使用 Apache Camel?_应用程序_03

  • 许多集成的一种高级样式:一旦您了解了基本模式以及如何使用 Camel 组件,您就会发现在 Camel 中制作许多集成变得很容易。

    这是 Camel 的一个优势:能够相当快地创建许多集成。如果您正在开发一组集成,并且您希望它们都以类似的方式进行开发,那么 Camel 是理想的选择。在大型公司中,这可能是非常有吸引力的选择,因为它有助于选择一种开发团队共享和理解的方法。

  • 处理数据,尤其是 Java 对象:由于它是一个 Java 框架,因此特别擅长处理 Java 对象。因此,如果您正在使用可以反序列化为 Java 对象的文件格式(许多文件格式可以转换为 Java 对象,例如 XML、JSON……),那么 Camel 可以轻松处理。

人们如何在现实世界中使用 Camel?

有哪些现实世界的例子?骆驼在野外如何使用?

这只是我见过或参与过的一小部分项目。在每个项目中,公司都在使用 Camel 来实现某个目标。我还在括号中包含了相关技术:

什么时候应该使用 Apache Camel?_java_04

                                                                                                             骆驼的广阔世界

  • 处理和路由数据:处理客户订单并将它们路由到数据库(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?