Apache Camel究竟是什么?

我不明白骆驼究竟做了什么。

如果你能用101个字给骆驼介绍一下:

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

请解释骆驼是什么。

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

Apache Camel是一个开放源码的Java框架,专注于使开发人员更容易和更易于访问。 它通过提供:

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

骆驼在第一章介绍了骆驼的一个免费章节。 乔纳森和我一起是这本书的合着者。

我以更容易的方式来描述这个…

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

让我们从大概已经知道的东西开始:Singleton模式,Factory模式等; 他们只是组织解决问题的方法,但它们本身并不是解决scheme。 “四人帮”出版了他们的书“ devise模式” ,分析和提炼了这些模式 。 他们在思考如何最好地构build我们的代码方面拯救了我们一些人的巨大努力。

就像“四人帮”一样,Gregor Hohpe和Bobby Woolf撰写了企业集成模式 (EIP)一书,他们提出并logging了一系列新的模式和蓝图,以便我们能够最好地devise大型的基于组件的系统,其中组件可以运行在相同的进程或不同的机器上。

他们基本上提出,我们将系统构build为以消息为导向,即组件之间使用消息作为input和输出进行通信,而绝对没有别的。 他们向我们展示了一套完整的模式,我们可以从中select和实施不同的组件,这些组件将形成整个系统。

那么Apache Camel是什么?

Apache Camel为您提供了EIP接口,基础对象,常用实现,debugging工具,configuration系统以及许多其他帮助程序,当您要实施解决scheme以遵循EIP时,将为您节省大量时间。

以MVC。 MVC在理论上相当简单,我们可以在没有任何框架帮助的情况下实现它。 但是良好的MVC框架为我们提供了随时可用的结构,并且在创build大型MVC项目时已经走了更多的步伐,并考虑了所需的所有其他“副”方面的东西,这也是我们大多数时候使用它们的原因。

这正是Apache Camel用于EIP的。 对于那些想要实施解决scheme来跟踪EIP的人来说,这是一个完整的生产就绪框架。

创build项目描述不应该很复杂。

我说:

Apache Camel是邮件技术与路由的粘合剂。 它将消息传递的起点和终点连接在一起,允许将来自不同源的消息传送到不同的目的地。 例如:JMS – > JSON,HTTP – > JMS或汇集FTP – > JMS,HTTP – > JMS,JSON – > JMS

维基百科说:

Apache Camel是一个基于规则的路由和中介引擎,它使用API​​(或声明式Java域特定语言)提供基于Java对象的企业集成模式实现,以configuration路由和中介规则。 特定于域的语言意味着Apache Camel可以在您的IDE中使用常规的Java代码支持types安全的智能完成路由规则,而不需要大量的XMLconfiguration文件。 尽pipeSpring内部的XMLconfiguration也被支持。

看到? 那不难呢?

简而言之:

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

为了做到这一点:

1)你可以开发自定义的程序,可以做到这一点(可能是费时,难以理解,为其他开发人员维护)

2)或者,你也可以使用Apache Camel以标准的方式来完成它(它的大部分连接器已经为你开发,你只需要设置它并且插入你的逻辑 – 称为Process):

骆驼将帮助你:

  1. 从任何来源/格式消费数据
  2. 处理这些数据
  3. 输出数据到任何源/格式

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

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

一张图比数千个描述要好。 该图说明了骆驼的架构。

在这里输入图像描述

在您理解Apache Camel之前,您需要了解的一件事是企业集成模式。 并不是每个人都知道他们。 虽然您当然可以阅读企业集成模式(Enterprise Integration Patterns)的书籍,但更快的方法是阅读维基百科有关企业应用程序集成(Enterprise Application Integration)的文章。

一个你已经阅读和理解的主题领域,你会更有可能了解Apache骆驼的目的

HTH

基于类比

把骆驼放在航空公司老板的鞋子里(例如:美国航空公司,捷特航空公司),可以很容易地理解骆驼航线。

“您的航空公司”的目的是将乘客从一个“城市”“携带”到另一个“世界”。 您使用波音,空客,HAL等不同“飞机公司”的飞机载客。

您的航空公司的乘客使用城市的“机场”登机,并使用城市的机场将他们降级。 一个乘客可能“旅行”到多个城市,但是他们必须穿过机场才能在您的航空公司的飞机和城市之间旅行。

请注意,从城市出发的乘客实质上是“到达”您的航空公司的飞机。 而一架“抵达”这个城市的乘客实质上是从飞机出发的。 由于我们处在航空公司老板的angular度,“到达乘客”和“离境乘客”这个词是从我们传统的基于城市视angular的概念中扭转过来的。

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

由于航空公司在飞机旅行期间提供的各种“便利设施”,旅客可以继续他们的日常活动。

最重要的是,您的航空公司还提供rest室设施,如“了解当地语言”,或为您准备“旅行”。

让我们用下面的代替上面用到的几个单词/短语:

你的航空公司:阿帕奇骆驼

飞机公司:运输机制

您的航空公司的飞机:Apache Camel的底层传输机制

携带:路线

乘客:消息;

城市:制度;

机场:骆驼部件;

了解当地语言:types转换;

出发:生产,生产

到达:消耗,消耗

旅行:路由

设施:提供

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

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

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

请注意,系统中的“生成”消息基本上被“消费”到Apache Camel的底层传输机制中。 而一个系统消耗的信息本质上是由“Apache Camel的底层传输机制”产生的。

既然我们试图理解骆驼,我们就必须从骆驼的angular度来思考。 因此,术语“消费者消息”和“生产者消息”的含义与我们基于系统观点的传统概念相反。

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

骆驼路由时可以处理消息。

除此之外,Camel还提供“types转换”等特殊function。

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

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

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

从另一个angular度来定义:

Apache Camel是一个集成框架。 它由一些Java库组成,可帮助您在Java平台上实现集成问题。 这是什么意思,以及它如何区别于一方的API和另一方的企业服务总线(ESB),这在我的文章“ 何时使用Apache Camel ”中有所描述。

骆驼从A发送消息到B:

在这里输入图像描述

为什么整个框架呢? 那么,如果你有:

  • 许多发送者和许多接收者
  • 十几个协议( ftphttpjms等)
  • 许多复杂的规则
    • 只发送一条消息到接收者A和B.
    • 发送一个消息B到接收器C 作为XML ,但是部分地翻译它, 丰富它(添加元数据)和IF条件X ,然后把它发送到接收器D也作为CSV

所以现在你需要:

  • 在协议之间转换
  • 粘合组件在一起
  • 定义路线 – 什么地方去
  • 在某些情况下过滤一些东西

骆驼给你上面(和更多)开箱:

在这里输入图像描述

用一个很酷的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"); } 

另见这个和这个和骆驼在行动(正如其他人所说,一本优秀的书!)

究竟是什么?

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

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

看看这篇文章和EIP模式文章

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

Camel使用Java域特定语言或DSL来创build企业集成模式或路由,如下所示,使用各种域特定语言(DSL)。

Java DSL – 使用stream利构build器风格的基于Java的DSL。

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

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

看看这篇文章由Anirban Konar为其中一个实时用例。

这与服务器一起吗?

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

这是一个独立的程序吗?

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

骆驼的主要优势 :您可以通过对每个集成使用相同的概念,将不同的应用程序与不同的技术(以及不同的协议)进行集成。

计算中的大多数“新”事物并不是真正的新事物,它们只是一个已经很好理解的东西的神秘包装。 当他们很难理解的时候,通常是因为有人决定创造新的语言术语或者为了不同的目的而将现有的术语殖民化(一个很好的例子就是X开发者颠倒了“客户端”和“服务器”的含义)。

Camel是用于应用程序中间件的基于Java的包装器/ API。

中间件是软件的通用术语,它提供不具有共同语言或数据types的实体之间的解释服务。

这就是骆驼的底部。 我们可以通过注意到它提供EIP型中间件来充实描述。

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

希望有所帮助。

这是另一个尝试。

您知道Webmethods,ICAN Seebeyond,Tibco BW,IBM Broker是如何的。 他们都帮助企业整合解决scheme。 这些工具通常被称为企业应用程序集成(EAI)工具。

围绕这些技术构build了大多数拖放工具,并且在部分中您将不得不用Java编写适配器。 这些适配器代码或者未经testing,或者在testing周围具有较差的工具/自动化。

就像编程中的devise模式一样,您也有用于常见集成解决scheme的企业集成模式。 他们被Gregor Hohpe和Bobby Woolf的一本同名书籍着名。

虽然实现使用一个或多个EIP的集成解决scheme是完全可能的,但是Camel尝试使用XML,Java,Groovy或Scala之一在您的代码库中执行此操作。

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

所以,骆驼是其他EAI工具的竞争技术,更好地支持testing你的集成代码。 该代码是简洁的,因为域特定语言(DSL)。 它甚至可以被商业用户阅读,而且是免费的,使您的工作效率。

有很多框架可以方便我们进行消息传递和解决消息传递中的问题。 一个这样的产品是Apache Camel。

大多数常见问题都有被certificate的解决scheme,称为devise模式。 消息传递的devise模式是企业集成模式(EIP),在这里很好的解释。 Apache骆驼帮助我们使用EIP来实现我们的解决scheme。

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

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

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

骆驼帮助路由,转换,监控。

它使用路线; 这可以描述为:

当服务总线收到特定消息时,它将通过任何服务/代理目标(例如队列/主题)来路由它。 这个path被称为路由。

例如: 您的股票申请已经获得分析师的一些input,将通过应用程序/networking组件处理,然后将结果发布给所有感兴趣/注册成员以进行特定股票更新。

是的,这可能有点晚了。 但是有一点需要补充的是,骆驼其实是一个工具箱,而不是一套完整的function。 开发时应考虑到这一点,并需要进行各种转换和协议转换。

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

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

为了给您一个观点,下面给出的Java DSL将创build一个REST端点,它将能够接受由产品清单组成的XML,并将其拆分为多个产品,并调用BrandProcessor的Process方法。 只要join.parallelProcessing(注意注释掉的部分)就可以并行处理所有的产品对象。 (产品类是JAXB / XJC从inputxml所限制的XSD生成的Java存根)。这些代码(以及less量的Camel依赖关系)将完成原来需要花费数百行Java代码的工作。

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

在添加路由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); 

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

在一个企业中,存在许多不同types的系统。 其中一些可能是遗留系统,而另一些可能是新的。 这些系统经常互相影响,需要整合。 这种交互或集成并不容易,因为系统的实现,它们的消息格式可能不同。 实现这一目标的一个方法是实现代码来弥合这些差异。 不过这将是点对点的整合。 如果明天如果系统中有变化,另一个也可能不得不被改变,这是不好的。 而不是这种导致紧耦合的点对点集成,我们可以实现一个额外的层来调解系统之间的差异 。 这会导致耦合松动,而不会影响我们现有的系统。 Apache Camel是一个基于规则的路由和中介引擎,它使用API​​(或声明式Java域特定语言)提供基于对象的企业集成模式实现,以configuration路由和中介规则。
详细的解释和例子可以在这里findApache的骆驼教程

它就像一个pipe道连接

 From---->To 

在你之间可以添加尽可能多的渠道和渠道。 水龙头可以是任何types的自动或手动的数据stream和pathstream通渠道。

它支持并实现了各种types的处理。 对于相同的处理方法,因为它有很多组件,每个组件也可以使用不同的方法提供所需的输出。

例如,文件传输可以通过移动或复制types文件以及文件夹,服务器或队列来完成。

 -from-->To - from-->process-->to - from-->bean-->to - from-->process-->bean-->to -from-->marshal-->process-->unmarshal-->to 

从/到—-文件夹,直接,seda,vm可以是任何东西

Interesting Posts