Apache Camel究竟是什么?

Myy*_*Myy 1310 java soa apache-camel enterprise-integration

我不明白Camel到底是做什么的.

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

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

请解释一下Camel是什么.

Amr*_*afa 1089

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

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

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

与Gang of Four一样,Gregor Hohpe和Bobby Woolf撰写了企业集成模式(EIP)一书,其中他们提出并记录了一套新的模式和蓝图,以便我们如何最好地设计基于组件的大型系统,其中组件可以是在相同的进程或不同的机器上运行.

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

那么什么是Apache Camel?

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

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

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

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

Cla*_*sen 686

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

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

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

Camel in Action中还有一个免费的章节,在第一章中介绍了Camel.乔纳森和我一起是那本书的合着者.

  • Camel in Action一书是一本非常好的书,可以学习基础知识以及如何使用Camel的一些更复杂的功能.我强烈推荐它!(我与书或出版商没有任何关系) (53认同)
  • 请参阅_comparison与Camels compet_的一些链接:http://camel.apache.org/articles.html. (8认同)
  • “与 Apache Camel 集成”一文中的图像不再有效。以下是图像工作的存档版本的链接:https://web.archive.org/web/20171029104103/https://dzone.com/articles/open-source-integration-apache (4认同)
  • @Clause如果想在mule ESB和Camel之间做出选择.选择一个ove另一个应该是我的demacation应该是什么 (2认同)

Dav*_*omb 653

创建项目描述不应该很复杂.

我说:

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

维基百科说:

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

看到?那不是很难吗?

  • Apache Camel主页是指这个帖子......他们没有设法提供他们自己产品的简短功能解释. (301认同)
  • 本文是建设性批评和诚实努力如何创建崇高文档的一个主要例子.它是官方Camel网站上的一个特色.但是让我们保持建设性,避免名称标记.文档编写者和其他贡献者有时难以接受,他们值得我们尊重.顺便说一句 - 我们有很多java编码标准......并且骄傲和荣幸地坚持下去......对于像Wiki和官方指南这样的媒体的文档标准怎么样? (15认同)
  • 现在,这就是我所说的清脆和重点.奇怪的是,接受的答案看起来像广告.+1 (9认同)
  • 现在是 2017 年,3 年后他们所做的只是承认他们自己的描述是流行语汤,并添加指向此线程的链接。他们甚至没有花时间将这个线程的摘要(甚至只是复制粘贴一些东西)添加到页面本身。我们得到的只是一个指向 SO 的链接。来吧,在某些时候你必须停止为这种态度辩护。 (3认同)

Mar*_*luk 119

简而言之:

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

为了做到这一点:

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

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

Camel将帮助您:

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

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

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

  • @JavaTechnical 考虑到消息传递模式(EIP),您已经可以用不同的语言编写不同的组件,因为这些消息采用与语言无关的格式,例如 JSON。Camel提供了一个简单的框架来实现EIP。这是基于我的理解。如果我错了,请纠正我。 (2认同)

And*_*ejs 92

Camel从A发送消息到B:

在此输入图像描述

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

  • 许多发件人和许多接收者
  • 协议的一打(ftp,http,jms等)
  • 许多复杂的规则
    • 仅向接收方A和B发送消息A.
    • 将消息B 作为XML发送到Receiver C ,但部分翻译它,丰富它(添加元数据)和IF条件X,然后将其发送到Receiver D,但是作为CSV.

所以现在你需要:

  • 协议之间的转换
  • 组件在一起
  • 定义路线 - 什么去哪里
  • 在某些情况下过滤一些东西

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

在此输入图像描述

使用酷炫的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");
}
Run Code Online (Sandbox Code Playgroud)

另见这个这个和Camel in Action(正如其他人所说的,一本好书!)

  • 作为一个菜鸟,这是本页上唯一对我理解 Camel 所做的事情有意义的答案。谢谢。 (24认同)

小智 73

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

在此输入图像描述


Dol*_*ava 52

基于类比

通过将自己置于航空公司所有者的角度(例如:美国航空公司,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提供了诸如"类型转换"等特殊功能......


Cro*_*ter 49

在尝试理解Apache Camel之前,您需要了解的一件事是企业集成模式.不是该领域的每个人都真正意识到它们.虽然您当然可以阅读企业集成模式书籍,但更快速地了解它们的方法是阅读类似于关于企业应用程序集成的维基百科文章.

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

HTH


Sun*_*nil 34

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

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

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


Kai*_*ner 22

另一个角度的定义:

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


Rav*_*abu 16

究竟是什么?

Apache Camel是一个轻量级集成框架,它实现了所有企业集成模式.您可以使用所需的模式轻松集成不同的应用程序.

您可以使用Java,Spring XML,Scala或Groovy.您可以想象几乎所有技术都可用,例如HTTP,FTP,JMS,EJB,JPA,RMI,JMS,JMX,LDAP,Netty等.

看看这篇文章EIP模式文章

它如何与用Java编写的应用程序交互?

Camel使用Java域特定语言或DSL以各种特定于域的语言(DSL)创建企业集成模式或路由,如下所示.

Java DSL - 使用流畅的构建器样式的基于Java的DSL.

企业集成模式的故事围绕这些概念解决:

消息,终点,生产者,消费者,路由,总线,转换和过程.

看看这篇文章由Anirban Konar 撰写的一篇实时用例.

它与服务器一起出现了什么?

它充当跨多个企业子系统的桥梁.

这是一个独立的计划吗?

Apache Camel是一个集成框架,集成了不同的独立应用程序.

Camel的主要优点:通过对每个集成使用相同的概念,您可以将不同的应用程序与不同的技术(和不同的协议)集成.


小智 12

计算机中的大多数"新"事物并不是真正的新事物,它们只是一个已经很好理解的东西的神秘包装.当他们很难理解,它通常是因为有人决定要发明新的语言术语或定植现有术语用于不同的目的(的一个很好的例子,就是X开发是什么'客户端’和'服务器’指的逆转.)

Camel是一个基于Java的包装器/ API,用于应用程序间中间件.

中间件是软件的通用术语,它在不共享公共语言或数据类型的实体之间提供解释服务.

这就是Camel的底部.我们可以通过注意它提供EIP类型的中间件来充实描述.

它不提供中间件本身,因为它无法知道应用程序需要通信的细节.但它提供了用于创建该中间件的不变部分的API(创建起点,创建终点,创建开始和结束的条件等)

希望有所帮助.

  • "计算机中的大多数"新"事物并不是真正的新事物,它们只是对已经很好理解的东西的一个神秘的包装." <<<<我整周都读过最好的东西! (4认同)

ski*_*ipy 8

这是另一种尝试.

您知道Webmethods,ICAN Seebeyond,Tibco BW,IBM Broker等等.他们都帮助企业中的集成解决方案.这些工具通常称为企业应用程序集成(EAI)工具.

主要是围绕这些技术构建的拖放工具,部分必须用Java编写适配器.这些适配器代码未经测试,或者在测试过程中工具/自动化程度较低.

就像编程中的设计模式一样,您可以使用企业集成模式来实现通用集成解决方案.他们被Gregor Hohpe和Bobby Woolf的同名书籍所着名.

虽然很有可能实现使用一个或多个EIP的集成解决方案,但Camel尝试使用XML,Java,Groovy或Scala之一在您的代码库中执行此操作.

Camel通过其丰富的DSL和路由机制支持本书中列出的所有企业集成模式.

所以Camel是其他EAI工具的竞争技术,可以更好地支持测试集成代码.由于域特定语言(DSL),代码简洁.即使是商业用户也可以阅读它,它是免费的,让您高效.


Che*_*wda 8

假设您创建了一家像亚马逊这样的电子商务公司,并且您只想专注于销售产品的策略/选择。与亚马逊送货车队不同,您无需自己处理从卖家到仓库的货物运输,而是在仓库中对其进行更改,例如包装并将其发送到其他城市和客户。您聘请了一家完成所有这些工作的公司,只需向他们提供您所有仓库位置、车辆类型、交货地点的信息以及何时执行的操作列表。然后他们自己处理,那就是 Apache Camel。一旦您将东西交给他们,他们就会负责将东西从一端移动到另一端,这样您就可以自由地专注于其他事情。


Nav*_*Raj 7

有许多框架可以帮助我们发送消息并解决消息传递中的问题.其中一个产品是Apache Camel.

大多数常见问题都被证明是称为设计模式的解决方案.消息传递的设计模式是企业集成模式(EIP),这里有很好的解释.Apache camel帮助我们使用EIP实现我们的解决方案.

集成框架的优势在于它能够通过EIP或其他模式,传输和组件的数量以及Apache骆驼站在列表顶部的易开发性来促进我们

每个框架都有自己的优点Apache骆驼的一些特殊功能如下.

  1. 它提供了许多DSL的编码,即基于Java DSL和基于Spring xml的DSL,它们很受欢迎.
  2. 使用方便,使用简单.
  3. Fuse IDE是一款可帮助您通过UI进行编码的产品


Kin*_*ien 7

用简单的英语,骆驼得到(许多)事情没有太多的锅炉板代码.

为了给您一个透视图,下面给出的Java DSL将创建一个REST端点,该端点将能够接受由产品列表组成的XML并将其拆分为多个产品并使用它调用BrandProcessor的Process方法.只需添加.parallelProcessing(注意注释部分),它将并行处理所有产品对象.(产品类是JAXB/XJC从XSD生成的Java存根,输入xml仅限于此.)这么多代码(以及少数Camel依赖项)将完成以前需要占用100行Java代码的工作.

from("servlet:item-delta?matchOnUriPrefix=true&httpMethodRestrict=POST")
.split(stax(Product.class))
/*.parallelProcessing()*/
.process(itemDeltaProcessor);
Run Code Online (Sandbox Code Playgroud)

添加路由ID和日志记录语句后

from("servlet:item-delta?matchOnUriPrefix=true&httpMethodRestrict=POST")
.routeId("Item-DeltaRESTRoute")
.log(LoggingLevel.INFO, "Item Delta received on Item-DeltaRESTRoute")
.split(stax(Product.class))
.parallelProcessing()
.process(itemDeltaProcessor);
Run Code Online (Sandbox Code Playgroud)

这只是一个示例,Camel不仅仅是REST的终点.只需看看可插入的组件列表http://camel.apache.org/components.html


cwa*_*ash 7

101字介绍

Camel 是一个具有一致 API 和编程模型的框架,用于将应用程序集成在一起。API 基于企业集成模式中的理论——即,一堆倾向于使用消息传递的设计模式。它提供了大多数这些模式的开箱即用的实现,此外还附带了 200 多个不同的组件,您可以使用它们轻松地与各种其他系统进行对话。要使用 Camel,首先在 POJO 中编写业务逻辑并实现以消息为中心的简单接口。然后使用 Camel 的 DSL 创建“路由”,这些规则集用于将您的应用程序粘合在一起。

扩展介绍

从表面上看,Camel 的功能可以与传统的企业服务总线产品相媲美。我们通常认为 Camel Route 是一个位于服务器端的“中介”(又名编排)组件,但因为它是一个 Java 库,所以很容易嵌入,它也可以存在于客户端应用程序中,并帮助您集成它具有点对点服务(又名编排)。您甚至可以使用处理 Camel 路由内消息的 POJO,并轻松地将它们分拆到它们自己的远程消费者进程中,例如,如果您只需要独立扩展一个片段。您可以根据需要使用 Camel 通过任意数量的不同远程传输/协议连接路由或处理器。您是否需要一个极其高效和快速的二进制协议,还是一种更具人类可读性且易于调试的方法?如果你想切换怎么办?使用 Camel,这通常就像更改路线中的一两条线路一样简单,而根本不更改任何业务逻辑。或者您可以同时支持两者 - 您可以在 Camel 上下文中自由地一次运行多个路由。

对于将存在于单个进程或 JVM 中的简单应用程序,您实际上并不需要使用 Camel - 这将是矫枉过正。但这在概念上并不比您自己编写的代码更困难。如果您的需求发生变化,业务逻辑和胶水代码的分离使得随着时间的推移更容易维护。一旦您学习了 Camel API,就可以像使用瑞士军刀一样轻松地使用它,并在许多不同的上下文中快速应用它,以减少您必须编写的自定义代码量。您可以学习一种风格——例如 Java DSL,一种易于链接在一起的流畅 API——并轻松地学习其他风格。

总体而言,如果您尝试进行微服务,Camel 非常适合。我发现它对于进化架构非常宝贵,因为您可以推迟许多关于协议、传输和其他系统集成问题的困难、“容易出错”的决定,直到您对问题领域有了更多的了解。只需专注于您的 EIP 和核心业务逻辑,并随着您了解更多信息而切换到具有“正确”组件的新路由。


Kha*_*M A 6

Apache Camel 是一个用于企业集成的 Java 框架。例如:- 如果您正在构建一个与许多供应商 API 交互的 Web 应用程序,我们可以使用骆驼作为外部集成工具。我们可以根据用例做更多的事情。来自 Manning 出版物的 Camel in Action 是一本学习 Camel 的好书。集成可以定义如下。

语言语言

from("jetty://0.0.0.0:8080/searchProduct").routeId("searchProduct.products").threads()
    .log(LoggingLevel.INFO, "searchProducts request Received with body: ${body}")
    .bean(Processor.class, "createSearchProductsRequest").removeHeaders("CamelHttp*")
    .setHeader(Exchange.HTTP_METHOD, constant(org.apache.camel.component.http4.HttpMethods.POST))
    .to("http4://" + preLiveBaseAPI + searchProductsUrl + "?apiKey=" + ApiKey
                    + "&bridgeEndpoint=true")
    .bean(Processor.class, "buildResponse").log(LoggingLevel.INFO, "Search products finished");
Run Code Online (Sandbox Code Playgroud)

这只是创建一个 REST API 端点,该端点又调用外部 API 并将请求发回

春天的DSL

<route id="GROUPS-SHOW">
    <from uri="jetty://0.0.0.0:8080/showGroups" />
    <log loggingLevel="INFO" message="Reqeust receviced service to fetch groups -> ${body}" />
    <to uri="direct:auditLog" />
    <process ref="TestProcessor" />
</route>
Run Code Online (Sandbox Code Playgroud)

来回答你的问题

  1. 究竟是什么?Ans:- 这是一个实现企业集成模式的框架
  2. 它如何与用 Java 编写的应用程序交互?Ans:- 它可以与任何可用的协议交互,如 http、ftp、amqp 等
  3. 它是与服务器一起使用的东西吗?Ans:- 可以像tomcat一样部署在容器中,也可以作为java进程独立部署
  4. 它是一个独立的程序吗?答:- 可以。

希望能帮助到你


sa_*_*nyc 5

Camel有助于路由,转换和监控.

它使用Routes; 可以描述为:

当服务总线收到特定消息时,它将通过没有服务/代理目的地(例如队列/主题)路由它.此路径称为路径.

示例: 您的股票应用程序已获得分析师的一些输入,它将通过应用程序/ Web组件进行处理,然后结果将发布给所有感兴趣/注册的成员以进行特定的库存更新.


Sou*_*hti 5

是的,这可能有点晚了。但是要添加到其他人的评论中的一件事是,Camel 实际上是一个工具箱,而不是一组完整的功能。您在开发时应牢记这一点,并需要进行各种转换和协议转换。

Camel 本身依赖于其他框架,因此有时您还需要了解这些框架,以便了解哪个最适合您的需求。例如,有多种方法可以处理 REST。一开始这可能会让人有点困惑,但是一旦您开始使用和测试,您就会感到轻松自在,并且您对不同概念的了解也会增加。


Mid*_*mal 5

Apache Camel 是一个轻量级的集成框架,它实现了所有的企业集成模式。您可以使用所需的模式轻松集成不同的应用程序。您可以使用 Java、Spring XML、Scala 或 Groovy。

Apache Camel 在 Java 虚拟机 (JVM) 上运行。... Apache Camel 的核心功能是它的路由引擎。它根据相关路由分配消息。路由包含流和集成逻辑。它是使用 EIP 和特定的 DSL 实现的。

在此处输入图片说明