什么是Apache Camel?

我不知道骆驼到底做了什么。

如果你可以用101个字来介绍骆驼:

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

请解释一下什么是骆驼。

638797 次浏览

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

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

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

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

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

HTH

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

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可以支持类型安全的智能完成IDE中的路由规则,使用常规Java代码,而无需大量XML配置文件;尽管也支持Spring中的XML配置。

看到没?这不难吧?

我用一种更容易理解的方式来描述这一点…

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

让我们从我们大概已经知道的开始:单例模式、工厂模式等;它们只是组织问题解决方案的方式,但它们本身并不是解决方案。四人帮在出版他们的书《设计模式》时为我们其他人分析和提取了这些模式。它们节省了我们中的一些人思考如何最好地构建代码的巨大精力。

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

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

什么是Apache Camel?

Apache Camel为您提供了EIP的接口、基本对象、常用的实现、调试工具、配置系统和许多其他帮助程序,当您想要实现解决方案以遵循EIP时,这些帮助程序将为您节省大量时间。

MVC为例。MVC在理论上非常简单,我们可以在没有任何框架帮助的情况下实现它。但是好的MVC框架为我们提供了现成的结构,并且在创建大型MVC项目时已经额外考虑了所有其他“附带”的东西,这就是我们大部分时间使用它们的原因。

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

从另一个角度定义:

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

简而言之:

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

为了做到这一点:

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

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

Camel将帮助您:

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

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

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

这是另一个尝试。

你知道有什么/曾经有过像Web方法、ICAN SeeBeyond、Tibco BW、IBMBroker这样的东西。它们都有助于企业中的集成解决方案。这些工具通常被称为企业应用集成(EAI)工具。

大多数拖放工具都是围绕这些技术构建的,并且在某些方面您必须在Java中编写适配器。这些适配器代码要么未经测试,要么围绕测试的工具/自动化很差。

就像编程中的设计模式一样,您有用于常见集成解决方案的企业集成模式。它们因Gregor Hohpe和Bobby Woolf的同名书籍而闻名。

尽管很有可能实现使用一个或多个EIP的集成解决方案,但Camel尝试在您的代码库中使用XML、Java、Groovy或Scala之一来实现这一点。

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

因此,Camel是一项与其他EAI工具竞争的技术,它可以更好地支持测试您的集成代码。由于领域特定语言(DSL),代码简洁。甚至商业用户也可以阅读它,它是免费的,让您提高工作效率。

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

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

集成框架的优势在于它能够通过EIP或其他模式、传输和组件的数量以及易于开发来帮助我们,而Apache骆驼在这方面名列前茅

每个框架都有自己的优势Apache Camel的一些特殊功能如下。

  1. 它提供了许多DSL中的编码,即JavaDSL和基于Spring xml的DSL,这是流行的。
  2. 使用方便,使用简单。
  3. Fuse IDE是一款帮助您通过UI编码的产品

Camel帮助路由,转换,监控。

它使用路由;可以描述为:

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

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

基于类比

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

你的航空公司的目的是将乘客从一个城市运送到世界上的另一个城市。你使用来自不同航空公司的飞机来运送乘客,如波音、空中客车、HAL。

您的航空公司使用从城市出发的机场登机,并使用到城市的机场登机。乘客可以“旅行”到多个城市,但在任何地方,他们都必须通过机场才能在您的航空公司的飞机和城市之间旅行。

请注意,从城市“出发”的乘客本质上是“抵达”您的航空公司的飞机。而“抵达”城市的路人本质上是离开飞机。由于我们处于航空公司所有者的位置,“抵达乘客”和“离开乘客”一词与我们基于城市视角的传统概念相反。

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

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

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

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

您的航空公司:Apache Camel

航空公司:运输机制

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

携带:路由

乘客:留言;

城市:系统;

机场:骆驼组件;

理解本地语言:类型转换;

生产,生产

到达:消费,消费

旅行:路由

设施:提供

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

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

Apache Camel使用“from”系统的“Camel based Component”获取消息,并使用“to”系统的“Camel based Component”将它们丢弃。一条消息可以路由到多个系统,但在任何地方,它们都必须通过“Camel based Components”才能在“Apache Camel的底层传输机制”和系统之间传输。

请注意,从系统“生成”的消息本质上是“消费”到Apache Camel的底层传输机制中。系统消费的消息本质上是由“Apache Camel的底层传输机制”生成的。

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

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

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

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

计算中的大多数“新”事物根本不是真正的新事物,它们只是围绕着已经很好理解的东西的神秘包装。当它们难以理解时,通常是因为有人决定发明新的语言术语或为了不同的目的殖民现有术语(0的一个很好的例子是X开发人员颠倒了“客户端”和“服务器”的含义。)

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

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

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

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

希望有帮助。

是的,这个可能有点晚了。但是在大家都这么说的时候需要补充一点的是,Camel其实是一个工具箱,而不是一整套功能。大家在开发的时候应该牢记这一点,需要做各种转换和协议转换。

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

到底是什么东西?

apachecamel是一个轻量级的集成框架,它实现了许多Enterprise集成模式。

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

看看这个文章EIP模式文章

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

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

JavaDSL-使用流利构建器样式的基于Java的DSL。

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

消息、端点、生产者、消费者、路由、总线、转换和过程

看看这个文章 by Anirban Konar的实时用例之一。

它是与服务器一起使用的吗?

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

它是一个独立的程序吗?

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

骆驼的最大优势:您可以通过对每次集成使用相同的概念,将不同的应用程序与不同的技术(和不同的协议)集成在一起。

简单地说,camel在没有太多样板代码的情况下完成了(许多)事情。

只是为了给你一个视角,下面给出的JavaDSL将创建一个REST端点,它将能够接受由产品列表组成的XML,并将其拆分为多个产品,并用它调用Brand处理器的Process方法。只需添加.并行处理(注意注释掉的部分),它就会并行处理所有的产品对象。(产品类是JAXB/XJC生成的Java来自XSD的存根,输入xml仅限于该存根。)这么多代码(以及一些Camel依赖项)将完成过去需要100行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

Camel从A向B发送消息:

在此处输入图片描述

为什么要为此建立一个完整的框架?如果你有:

  • 许多发送者和许多接收者
  • 十几个协议(ftphttpjms等)
  • 许多复杂的规则
    • 仅向接收者A和B发送消息A
    • 将消息B发送到接收器C如xml,但部分翻译它,丰富它(添加元数据)和如果条件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");}

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

就像一条管道

From---->To

在两者之间,您可以添加尽可能多的通道和管道。水龙头可以是任何类型数据流和通道化流的路由的自动或手动。

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

例如,文件传输可以在骆驼中完成,类型为文件移动或复制,也可以从文件夹、服务器或队列中进行。

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

from/to----文件夹,直接,seda,vm可以是任何东西

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

JavaDSL

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");

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

Spring 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>

来回答你的问题

  1. 它到底是什么?Ans:-它是一个实现企业集成模式的框架
  2. 它如何与用Java编写的应用程序交互?答:-它可以与任何可用的协议交互,如超文本传输协议,ftp,amqp等
  3. Ans:-它可以部署在像tomcat这样的容器中,也可以作为java进程独立部署
  4. 它是一个独立的程序吗?答:-它可以是。

希望有帮助

假设你创建了一家像亚马逊这样的电子商务公司,你想只专注于销售产品的战略/选择。不像亚马逊的送货车队,而不是你自己处理从卖家到仓库的货物运输,在仓库中对其进行更改,如包装,并将其发送给其他城市和客户。你雇佣了一家公司来做这一切,只是给他们所有仓库位置、车辆类型、送货地点的信息,以及何时做什么的列表。然后他们自己处理,那就是Apache Camel。一旦你把东西交给他们,他们就负责把东西从一端移动到另一端,这样你就可以自由地专注于其他事情。

101字简介

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

扩展简介

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

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

总的来说,如果你想做微服务,Camel是一个非常适合的选择。我发现它对于进化架构来说是无价的,因为你可以推迟很多关于协议、传输和其他系统集成问题的困难、“容易出错”的决策,直到你对你的问题领域有更多的了解。只需专注于你的EIP和核心业务逻辑,并随着你了解更多,切换到使用“正确”组件的新路线。

另一种观点(基于更基本的数学主题)

最通用的计算平台是图灵机

图灵机有一个问题。所有的输入/输出数据都停留在图灵机内部。在现实世界中,图灵机外部有输入源和输出接收器,并且通常由我们无法控制的系统管理。也就是说,这些外部系统将使用任何所需的数据调度器以任何格式随意发送/接收数据。

问题:我们如何设法使独立的图灵机以最通用的方式相互交谈,以便每个图灵机将其对等体视为输入数据的来源或输出数据的接收器?

回答:使用诸如camel、mule、BizTalk或任何其他ESB之类的东西来抽象完成不同的“物理”(或虚拟软件)图灵机之间的数据处理。

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

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

在此处输入图片描述