题 Apache Camel究竟是什么?


我不明白到底是什么 骆驼 确实。

如果你能用101个单词介绍骆驼:

  • 究竟是什么?
  • 它如何与用Java编写的应用程序交互?
  • 它与服务器一起出现了什么?
  • 这是一个独立的计划吗?

请解释一下Camel是什么。


1140
2018-01-13 02:32


起源




答案:


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

Apache Camel是一个开源Java框架,专注于使开发人员更容易集成和访问。它通过以下方式实现:

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

还有一个免费章节 骆驼在行动 在第一章介绍了Camel。乔纳森和我一起是那本书的合着者。


598
2018-01-13 10:49



Camel in Action一书是一本非常好的书,可以学习基础知识以及如何使用Camel的一些更复杂的功能。我强烈推荐它! (我与本书或出版商没有任何关系) - aldridmc
@Clause如果想在mule ESB和Camel之间做出选择。选择一个ove另一个应该是我的demacation应该是什么 - kuhajeyan
查看一些链接 与Camels竞争对手比较 在: camel.apache.org/articles.html。 - Claus Ibsen
那么,它可以用来连接微服务吗? - dotslash
是绝对的,它可以用于连接微服务,它毕竟只是一个小的Java工具包/框架。 Camel in Action第2版书中有关于Camel微服务的完整章节。 - Claus Ibsen


我想以更容易理解的方式描述这个......

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

让我们从我们可能已经知道的东西开始:Singleton模式,Factory模式等;它们只是组织解决问题的方法,但它们本身并不是解决方案。当他们出版他们的书时,四人帮对我们其余人进行了分析和提取: 设计模式。他们在思考如何最好地构建代码方面为我们付出了巨大的努力。

就像四人帮一样,Gregor Hohpe和Bobby Woolf撰写了这本书 企业集成模式 (EIP)他们提出并记录一组新模式和 蓝图 我们怎么样 最好 设计基于组件的大型系统,其中组件可以在同一个进程上运行,也可以在不同的机器上运行。

他们基本上建议我们构建我们的系统 信息 面向对象 - 组件使用消息作为输入和输出彼此通信,而绝对没有其他任何东西。它们向我们展示了一套完整的模式,我们可以从中选择并在我们的不同组件中实现,这些组件将共同构成整个系统。

那么什么是Apache Camel?

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

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

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


934
2017-07-18 11:38



这可能是问题的最佳答案。所有其他答案与互联网上的所有其他文章一样令人困惑 - Nerrve
EIP是关键。如果你不了解EIP,你可能会像瞎子和大象(骆驼)一样使用骆驼。 EIP - eaipatterns.com - hutingung
+50这个答案 - 从EIP简介开始,并与GOF和MVC及框架进行类比。从问题来看,它看起来OP没有EIP的想法。在阅读这个答案之前,我在同一条船上 - Java Geek
应该将此描述添加到Apache Camel主页,因为它回答了问题,然后是一些问题。正如他使用手写的MVC或通过使用“工具”来帮助做出这个答案一样,这让我有了一个理解,而不需要通过无休止的其他(有用的)链接进行搜索,只需要所有需要的就是这种简洁回答。 - Azkuma
一点点EIP问题:“多年来已经有很多库和框架来帮助集成。但是企业集成模式背后的概念经常被转换成一些复杂的类层次结构或需要连接在一起的对象。原本的意图和模式经常丢失。开发人员从此被迫专注于低级细节和一些复杂的类库API,失去了更大的图景和模式。“ - Quan Nguyen


创建一个 项目介绍 不应该复杂。

我说:

Apache Camel是具有路由功能的消息传递技术。它将消息传递开始和结束点连接在一起,允许将来自不同源的消息传输到不同的目的地。例如:JMS - > JSON,HTTP - > JMS或漏斗FTP - > JMS,HTTP - > JMS,JSON - > JMS

维基百科说:

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

看到?那不是很难吗?


636
2018-05-31 15:37



Apache Camel主页指的是这个帖子......他们没有设法提供他们自己产品的简短功能解释。 - youri
本文是建设性批评和诚实努力如何创建崇高文档的一个主要例子。它是Camel官方网站上的一个特色。但是让我们保持建设性,避免使用名称标记。文档编写者和其他贡献者有时难以接受,他们值得我们尊重。顺便说一句 - 我们有很多java编码标准......并且骄傲和荣幸地坚持下去......对于像Wiki和官方指南这样的媒体的文档标准怎么样? - YoYo
它是否像细粒度反向代理? - Asad Hasan
谢谢你为我说话 - slaxor
现在,这就是我所说的清脆和重点。奇怪的是,接受的答案看起来像一个广告。 +1 - EMM


简而言之:

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

为了做到这一点:

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

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

Camel将帮助您:

  1. 使用任何来源/格式的数据
  2. 处理这些数据
  3. 将数据输出到任何源/格式

通过使用Apache Camel,您可以轻松地将系统理解/维护/扩展到其他开发人员。

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


107
2018-06-04 20:48



那意味着其他开发人员也可以改变另一种编程语言的逻辑吗? - JavaTechnical
@JavaTechnical给定了消息传递模式(EIP),您已经可以使用不同语言编写不同的组件,因为这些消息是与JSON等语言无关的格式。 Camel提供了一个实现EIP的简单框架。这是基于我的理解。如果我错了,请纠正我。 - Dheeraj Bhaskar


图表比成千上万的描述要好。 该图说明了Camel的体系结构。

enter image description here


66
2017-12-27 02:48





Camel从A发送消息到B:

enter image description here

为什么整个框架为此?好吧,如果你有:

  • 许多发件人和许多接收者
  • 十几个协议(ftphttpjms等)
  • 许多复杂的规则
    • 仅向接收者A和B发送消息A.
    • 向接收方C发送消息B. 作为XML,但部分 翻译 它, 丰富 它(添加元数据)和 如果条件X,然后将它发送给Receiver D,但是 作为CSV

所以现在你需要:

  • 翻译 协议之间
  •  组件在一起
  • 定义路线 - 什么去哪里
  • 过滤 在某些情况下有些事情

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

enter image description here

使用酷炫的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");
}

也可以看看 这个 和 这个 和骆驼在行动(正如其他人所说,一本好书!)


54
2018-04-28 17:53





在尝试理解Apache Camel之前,您需要了解的一件事是企业集成模式。并非该领域的每个人都了解它们。虽然你当然可以阅读企业集成模式书,但更快速地了解它们的方法是阅读类似维基百科文章的内容。 企业应用集成

您已经阅读并理解了主题领域,您将更有可能理解Apache Camel的目的

HTH


45
2018-01-13 03:36





基于类比

通过将自己置于航空公司所有者的角度(例如:美国航空公司,Jet Airways),可以很容易地理解基于骆驼的路由。

“您的航空公司”的目的是将“乘客”从一个“城市”传送到另一个“城市”。你使用波音,空客,HAL等不同“飞机公司”的飞机来载运乘客。

您的航空公司的乘客使用来自城市的“机场”并使用城市的机场将其取消。乘客可以“前往”多个城市,但在任何地方他们都必须经过机场才能在您的航空公司的飞机和城市之间旅行。

请注意,从该城市“离开”的乘客基本上是“抵达”您的航空公司的飞机。一名乘客“抵达”该城市,基本上是从飞机上出发的。由于我们是航空公司所有者,因此“到达乘客”和“离境乘客”一词与我们基于城市视角的传统概念相反。

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

由于航空公司在飞机上提供的各种“便利设施”,乘客在旅行时可以继续一天的活动。

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

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

您的航空公司:Apache Camel

飞机公司:运输机制

您的航空公司的飞机:Apache Camel的基础传输机制

携带:路线

乘客:消息;

城市:系统;

机场:骆驼组件;

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

离开:生产,生产

到达:消费,消费

旅行:路由

设施:提供

更换单词后,这是你得到的:

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

Apache Camel使用'from'系统的'Camel based Component'来获取消息,并使用'to'系统的'Camel based Component'删除它们。消息可以路由到多个系统,但是在任何地方他们都必须通过“基于Camel的组件”来在“Apache Camel的底层传输机制”和系统之间传输。

请注意,系统中“生成”的消息基本上被“消耗”到Apache Camel的底层传输机制中。并且系统消耗的消息基本上由'Apache Camel的底层传输机制'产生。

既然我们试图了解Camel,我们必须从Camel的角度思考。因此,术语“消费者信息”和“生产者信息”的含义与我们基于系统视角的传统概念相反。

相同的'基于Camel的组件'的编码基础设施被'生产者消息'和'消费者消息'使用。 “基于Camel的组件”为“生产者消息”提供“生产者端点”,为“消费者消息”提供“消费者端点”。

Camel在路由时可以处理消息。

在此路由之上,Camel提供了诸如“类型转换”等特殊功能......


42
2018-04-13 12:54



骆驼相当不错的比喻 - pramodc84
很棒的解释 - javalearner_heaven


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

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

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


34
2018-01-13 02:59