Apache Camel究竟是什么?

时间:2012-01-13 02:32:19

标签: java apache-camel soa enterprise-integration

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

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

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

请解释一下Camel是什么。

23 个答案:

答案 0 :(得分:1041)

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

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

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

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

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

那么什么是Apache Camel?

Apache Camel为您提供EIP接口,基础对象,常用实现,调试工具,配置系统以及许多其他助手,当您希望实施解决方案以遵循电子信息产品。

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

这正是Apache Camel对EIP的看法。 这是一个完整的生产就绪框架,适合希望实施其解决方案以遵循EIP的人。

答案 1 :(得分:648)

创建project description不应该很复杂。

我说:

  

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

维基百科说:

  

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

请参阅?那不是很难吗?

答案 2 :(得分:646)

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

  

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

来做到这一点      
      
  • 所有广泛使用的Enterprise Integration Patterns(EIPs)
  • 的具体实现   
  • 连接各种传输和API
  •   
  • 易于使用的域特定语言(DSL)将EIP和传输连接在一起
  •   

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

答案 3 :(得分:114)

简而言之:

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

为了做到这一点:

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

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

Camel将帮助您:

  1. 使用任何来源/格式的数据
  2. 处理此数据
  3. 将数据输出到任何来源/格式
  4. 通过使用Apache Camel,您可以轻松地将系统理解/维护/扩展到其他开发人员。

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

答案 4 :(得分:82)

Camel从A发送消息到B:

enter image description here

为什么要有一个完整的框架?那么,如果你有:

  • 许多发件人和许多接收者
  • 十几个协议(ftphttpjms等。)
  • 许多复杂的规则
    • 仅向接收者A和B发送消息A
    • 向Receiver C发送消息B 为XML ,但部分翻译充实(添加元数据)和 IF条件X ,然后将其发送给Receiver D,但为CSV

所以现在你需要:

    协议之间
  • 翻译
  • 粘合组件
  • 定义路线 - 其他地方
  • 过滤某些情况下的某些内容

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

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

另请参阅thisthis以及Camel in Action(正如其他人所说,这本书很棒!)

答案 5 :(得分:73)

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

enter image description here

答案 6 :(得分:49)

基于模拟

基于骆驼的路由可以通过让自己成为航空公司所有者(例如:美国航空公司,Jet Airways)的鞋子来轻松理解。

您的航空公司的目的'是为了携带' '乘客'来自一个城市'到世界上的另一个。您使用来自不同飞机公司的飞机'像波音公司,空中客车公司,HAL公司那样载客。

您的航空公司的乘客使用机场'来自城市和他们使用机场的城市。乘客可以“旅行”。到了多个城市,但到处都是他们必须经过机场在你的航空公司的飞机和城市之间旅行。

请注意,乘客正在离开'来自这个城市的基本上是“抵达”。进入你的航空公司'飞机。一位过时的人到达了#39;进入城市,基本上是从飞机上出发。由于我们是航空公司老板的鞋子,所以“到达乘客”这个词是“乘客”。和“离开的乘客”#39;与我们基于城市视角的传统观念相反。

相同'机场'每个城市的基础设施都由“离开”使用。乘客和'到达'乘客。机场提供离境基础设施'对于离境乘客而言,这与到达的基础设施不同。为到达的乘客提供。

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

最重要的是,您的航空公司还提供休息室设施,以便进行特殊治疗,例如了解当地语言'或者为你准备旅行'。

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

您的航空公司:Apache Camel

飞机公司:运输机制

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

携带:路线

乘客:消息;

city:system;

机场:骆驼组件;

了解当地语言:输入转化次数;

离开:生产,生产

到达:消费,消费

旅行:路由

设施:提供

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

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

Apache Camel使用基于Camel的组件'来接收消息。 '来自'系统并使用基于Camel的组件' '到'系统。消息可以路由到多个系统,但是他们必须经历的基于Camel的组件'在阿帕奇骆驼的基础传输机制之间旅行'和系统。

请注意,生成了一条消息'系统基本上是消费的#39;进入Apache Camel的底层传输机制'并且系统消耗的消息基本上由Apache Camel的底层传输机制产生。

由于我们试图了解Camel,因此我们必须从Camel的角度思考。术语“消费者信息”的含义'和'制作人留言'因此,与我们基于系统观点的传统观念相反。

相同'基于Camel的组件'编码基础设施由生产者消息'使用。和消费者信息' A'基于Camel的组件'提供生产者终点'对于生产者消息'和消费者端点'消费者信息'。

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

在此路由的基础上,Camel提供了诸如“类型转换”等特殊功能。还有更多...

答案 7 :(得分:48)

在尝试理解Apache Camel之前,您需要了解的一件事是企业集成模式。不是该领域的每个人都真正意识到它们。虽然你当然可以阅读企业集成模式书,但更快地了解它们的方法是阅读Enterprise Application Integration上的维基百科文章。

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

HTH

答案 8 :(得分:34)

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

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

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

答案 9 :(得分:22)

另一个角度的定义:

Apache Camel是一个集成框架。它由一些Java库组成,可帮助您在Java平台上实现集成问题。这意味着它与一方的API和另一方的企业服务总线(ESB)的不同之处在我的文章“When to use Apache Camel”中有所描述。

答案 10 :(得分:14)

  

究竟是什么?

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

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

请查看此articleEIP pattern article

  

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

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

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

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

消息,终点,生产者,消费者,路由,总线,转换和处理

通过Anirban Konar查看这个article的实时用例。

  

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

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

  

这是一个独立的计划吗?

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

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

答案 11 :(得分:12)

大多数"新"计算中的东西根本不是新的,它们只是一个已经很好理解的东西的神秘包装。当他们难以理解时,通常是因为有人决定发明新的语言术语或为不同的目的殖民现有的术语(的一个很好的例子是X开发人员&# 39;逆转什么"客户"和"服务器"意思。)

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

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

骆驼是什么,在底部。我们可以通过注意它提供EIP类型的中间件来充实描述。

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

希望有所帮助。

答案 12 :(得分: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),代码简洁。即使是商业用户也可以阅读它,它是免费的,可以让您高效工作。

答案 13 :(得分:7)

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

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

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

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

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

答案 14 :(得分:6)

用简单的英语说,骆驼可以完成(许多)没有太多锅炉板代码的事情。

为了给您一个透视图,下面给出的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);

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

即可

答案 15 :(得分:5)

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

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

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

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

答案 16 :(得分:3)

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

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

答案 17 :(得分:3)

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

Java DSL

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编写的应用程序交互?答: - 它可以与任何可用的协议进行交互,如http,ftp,amqp等
  3. 它与服务器一起出现了什么? Ans: - 它可以部署在像tomcat这样的容器中,也可以作为java进程独立部署
  4. 这是一个独立的节目吗?答: - 可以。
  5. 希望有所帮助

答案 18 :(得分:2)

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

答案 19 :(得分:1)

它就像连接管道

From---->To

在你之间你可以添加尽可能多的频道和管道。水龙头可以是任何类型 自动或手动数据流和渠道化流程。

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

例如,  文件传输可以在camel中完成,类​​型文件被移动或复制,也可以从文件夹,服务器或队列中完成。

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

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

答案 20 :(得分:1)

101单词简介

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

扩展介绍

表面上,Camel的功能可以与传统的Enterprise Service Bus产品相媲美。我们通常认为骆驼之路是驻留在服务器端的“中介”(也称为编排)组件,但由于它是Java库,因此易于嵌入,并且也可以驻留在客户端应用程序中,并帮助您集成它具有点对点服务(又称为编排)。您甚至可以使用处理骆驼路线中消息的POJO,轻松地将它们分解到自己的远程使用者进程中,例如如果您只需要独立缩放一个。您可以根据需要使用Camel通过任意数量的不同远程传输/协议连接路由或处理器。您是否需要一种极其高效,快速的二进制协议,或者是更易于阅读且易于调试的协议?如果要切换怎么办?使用骆驼,这通常就像更改路线中的一两条线一样简单,根本不需要更改任何业务逻辑。或者,您也可以同时支持两者-您可以在骆驼语境中自由地一次运行许多路线。

对于将要驻留在单个进程或JVM中的简单应用程序,您实际上并不需要使用Camel-这太过分了。但是从概念上讲,这并不比编写自己的代码困难。而且,如果您的需求发生变化,则业务逻辑和胶合代码的分离将使维护更容易。一旦学习了Camel API,就可以像一把瑞士军刀一样容易地使用它,并在许多不同的情况下快速应用它,以减少原本必须编写的自定义代码量。您可以学习一种口味-例如Java DSL,一种易于链接在一起的流利的API-并轻松选择其他口味。

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

答案 21 :(得分:1)

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

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

enter image description here

答案 22 :(得分:0)

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

最通用的计算平台是[https://en.wikipedia.org/wiki/Turing_machine]

图灵机出现问题。所有输入/输出数据都保留在翻唱机内部。在现实世界中,图灵机外部有输入源和输出接收器,通常由我们控制范围之外的系统控制。即,那些外部系统将以任何期望的数据调度器以任何格式随意发送/接收数据。

问题:我们如何设法使独立的图灵机以最通用的方式彼此交谈,以使每台图灵机将其对等方视为输入数据源或输出数据宿? / p>

答案:使用诸如骆驼,ule子,BizTalk或任何其他ESB之类的东西来抽象化完成不同的“物理”(或虚拟软件)图灵机之间的数据处理。