Apache Camel 到底是什么?

我不明白骆驼到底在做什么。

如果您能用 101 个字来介绍骆驼:

  • 到底是什么
  • 它如何与用 Java 编写的应用程序交互?
  • 它与服务器一起使用吗?
  • 它是一个独立程序吗?

请解释一下骆驼是什么。

答案

我以一种更易于理解的方式描述了这一点...

为了了解什么是 Apache Camel,您需要了解什么是企业集成模式。

让我们从我们大概已经知道的内容开始:Singleton 模式,Factory 模式等;它们只是组织问题解决方案的方式,而本身并不是解决方案。四人帮在他们出版《 设计模式》一书时,对其他人进行了分析和提取。他们节省了我们中的一些人在思考如何最好地构建代码结构方面的精力。

就像 “四人帮” 一样,Gregor Hohpe 和 Bobby Woolf 撰写了《 企业集成模式》 (EIP)一书,他们在其中提出并记录了一组新的模式和蓝图,以帮助我们最佳地设计大型基于组件的系统,其中可以使用组件。在同一进程或另一台计算机上运行。

他们基本上建议我们将系统构造为面向消息的 - 组件之间使用消息作为输入和输出进行相互通信,而绝对没有其他消息。它们向我们展示了一套完整的模式,我们可以从中选择并在不同的组件中实施,这些组件将一起构成整个系统。

那么什么是 Apache Camel?

Apache Camel 为您提供了 EIP 的接口,基础对象,通常需要的实现,调试工具,配置系统以及许多其他帮助器,当您要实施解决方案以遵循 EIP 时,将为您节省大量时间。

以 MVC 为例。 MVC 在理论上非常简单,我们可以在没有任何框架帮助的情况下实现它。但是良好的 MVC 框架为我们提供了现成的结构,并花了很多功夫,并在创建大型 MVC 项目时考虑了您需要的所有其他 “方面”,这就是我们大多数时候使用它们的原因。

这正是 Apache Camel 用于 EIP 的含义。 对于想要实施其解决方案以遵循 EIP 的人们来说,这是一个完整的生产就绪框架。

如果您有 5 到 10 分钟的时间,我通常建议人们阅读 Jonathan Anstey 撰写的与 Apache Camel集成 。这是一篇写得很好的文章,简要介绍了 Camel 的一些概念并对其进行了概述,并且使用代码示例实现了用例。乔纳森在其中写道:

Apache Camel 是一个开放源代码 Java 框架,致力于使集成更容易并且对开发人员更易于访问。为此,它提供了:

  • 所有广泛使用的企业集成模式 (EIP)的具体实现
  • 连接到各种传输和 API
  • 易于使用的领域特定语言(DSL)将 EIP 连接和传输在一起

骆驼在行动中也有一个免费的章节,在第一章中介绍了骆驼。乔纳森与我合着那本书。

创建项目描述应该不复杂。

我说:

Apache Camel 是消息传递技术与路由的结合。它将消息的起点和终点连接在一起,从而允许将消息从不同的源传输到不同的目的地。例如:JMS-> JSON,HTTP-> JMS 或渠道 FTP-> JMS,HTTP-> JMS,JSON-> JMS

维基百科说:

Apache Camel 是基于规则的路由和中介引擎,它使用 API(或声明性 Java 域特定语言)来配置路由和中介规则,从而提供了基于 Java 对象的企业集成模式实现。特定领域的语言意味着 Apache Camel 可以使用常规 Java 代码在 IDE 中支持类型安全的路由规则的智能补全,而无需大量的 XML 配置文件。尽管也支持 Spring 内部的 XML 配置。

看到?那不难吗?

简而言之:

当需要连接 / 集成系统时,您可能需要连接到某些数据源,然后处理该数据以匹配您的业务需求。

为了做到这一点:

1)您可以开发执行此操作的自定义程序(可能耗时且难以理解,对于其他开发人员而言则难以维护)

2)或者,您可以使用 Apache Camel 以标准化方式进行操作(它已经为您开发了大多数连接器,您只需要进行设置并插入逻辑 - 称为 Process)即可:

骆驼将帮助您:

  1. 消费任何来源 / 格式的数据
  2. 处理此数据
  3. 将数据输出到任何源 / 格式

通过使用 Apache Camel,您将易于理解 / 维护 / 将系统扩展到其他开发人员。

Apache Camel 是使用企业集成模式开发的。这些模式可以帮助您很好地集成系统:-)

骆驼将消息从 A 发送到 B:

在此处输入图片说明

为什么要为此建立一个整体框架?好吧,如果您有:

  • 许多发送者和许多接收者
  • 十二种协议( ftphttpjms等)
  • 许多复杂的规则
    • 仅向收件人 A 和 B 发送消息 A
    • 将消息 B 作为 XML发送到接收方 C,但要进行部分转换充实 (添加元数据)和IF 条件 X ,然后也将其作为 CSV发送给接收方 D。

所以现在您需要:

  • 在协议之间翻译
  • 组件粘合在一起
  • 定义路线 - 去哪里
  • 在某些情况下过滤一些东西

骆驼开箱即用为您提供以上(以及更多)功能:

在此处输入图片说明

用很酷的 DSL 语言为您定义内容和方式:

new DefaultCamelContext().addRoutes(new RouteBuilder() {
        public void configure() {
            from("jms:incomingMessages")
                    .choice() // start router rules
                    .when(header("CamelFileName")
                            .endsWith(".xml"))
                    .to("jms:xmlMessages")
                    .when(header("CamelFileName")
                            .endsWith(".csv"))
                    .to("ftp:csvMessages");
}

另请参阅《 本》 ,《 本》和《骆驼在行动》(正如其他人所说,是一本好书!)

图表胜于数千个描述。此图说明了骆驼的体系结构。

在此处输入图片说明

基于类比

使自己陷入航空公司所有者(例如:美国航空,Jet Airways)的行列中,可以很容易地理解基于骆驼的航线。

“您的航空公司” 的目的是将 “旅客” 从一个 “城市” 运送到世界上的另一个城市。您使用波音,空中客车,HAL 等不同 “飞机公司” 的飞机载客。

您的航空公司使用出发城市的 “机场” 登上旅客,并使用出发城市的机场下车。乘客可能会 “旅行” 到多个城市,但是他们必须经过机场才能在航空公司的飞机和城市之间旅行。

请注意,从城市 “起飞” 的旅客实际上是在 “抵达” 您航空公司的飞机。一架 “到达” 城市的乘客实际上是从飞机上起飞的。由于我们是航空公司的主人,因此 “到达旅客” 和 “出发旅客” 一词与我们从城市角度出发的传统观念相反。

每个城市的 “机场” 基础设施都由 “出发” 和 “到达” 旅客使用。机场为离港旅客提供 “离港基础设施”,这与为到达旅客提供的“到达基础设施” 不同。

由于您的航空公司在飞行中在飞机内提供了各种 “便利设施”,因此乘客可以继续进行日常活动。

最重要的是,您的航空公司还提供休息室设施,以提供特殊待遇,例如 “了解当地语言” 或为您的 “旅行” 做准备。

让我们用以下内容替换上面使用的几个单词 / 短语:

您的航空公司:Apache Camel

飞机公司:运输机制

您航空公司的飞机:Apache Camel 的基本运输机制

携带:路线

乘客:留言;

城市:系统;

机场:骆驼成分;

了解当地语言:类型转换;

离开:生产,生产

到达:消费,消费

旅行:路线

便利设施:提供

替换单词之后,您将获得:

“Apache Camel” 的目的是将 “消息” 从一个 “系统” 路由到世界上的另一个系统。 Apache 骆驼使用不同的传输机制进行消息路由。

Apache Camel 使用 “from” 系统的 “基于 Camel 的组件” 拾取消息,并使用 “to” 系统的 “基于 Camel 的组件” 删除消息。一条消息可能会路由到多个系统,但是在任何地方,它们都必须经过 “基于 Camel 的组件” 才能在 “Apache Camel 的基础传输机制” 和系统之间传播。

请注意,从系统 “生成” 的消息实际上已 “消耗” 到 Apache Camel 的基础传输机制中”。系统消耗的消息实质上是由 “Apache Camel 的基础传输机制” 产生的。

由于我们试图理解骆驼,因此我们必须从骆驼的角度出发进行思考。因此,术语 “消费者消息” 和 “生产者消息” 的含义与基于系统角度的常规概念相反。

“生产者消息” 和 “消费者消息” 使用相同的 “基于骆驼的组件” 的编码基础结构。 “基于骆驼的组件” 为 “生产者消息” 提供了 “生产者端点”,为 “消费者消息” 提供了 “消费者端点”。

邮件在路由时可以由骆驼处理。

除了此路由之外,骆驼还提供特殊功能,例如 “类型转换” 等。

在尝试了解 Apache Camel 之前,您需要了解的一件事是企业集成模式。实际上,并不是每个人都知道它们。尽管您当然可以阅读《企业集成模式》这本书,但是更快地了解它们的更快方法是阅读诸如 Wikipedia 上有关Enterprise Application Integration 的文章。

您已经阅读并理解了该主题领域,那么您很有可能理解 Apache Camel 的目的。

高温超导

如果您了解企业集成模式,则 Apache Camel 是一个实现所有 EIP 的集成框架。

您可以将 Camel 作为独立的应用程序部署在 Web 容器中。

基本上,如果必须集成具有不同协议和技术的多个应用程序,则可以使用 Camel。

从另一个角度定义:

Apache Camel 是一个集成框架。它由一些 Java 库组成,可帮助您在 Java 平台上实现集成问题。我的文章 “ 何时使用 Apache Camel ” 中介绍了这意味着什么,以及它与一方面的 API 和另一方面的企业服务总线(ESB)有何不同。