首页 文章

Apache Camel究竟是什么?

提问于
浏览
1178

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

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

  • 究竟是什么?

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

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

  • 这是一个独立的计划吗?

Please explain what Camel is.

21 回答

  • 70

    在企业中,存在许多不同类型的系统 . 其中一些可能是遗留系统,而另一些可能是新系统 . 这些系统经常相互交互,需要集成 . 这种交互或集成并不容易,因为系统的实现,它们的消息格式可能不同 . 实现此目的的一种方法是实现弥合这些差异的代码 . 然而,这将是点对点集成 . 如果明天如果系统发生变化,那么另一个可能也必须改变,这是不好的 . 而不是这种导致紧耦合的点对点集成,我们可以在系统之间实现一个额外的层到 mediate the differences . 这导致松耦合并且不会影响我们现有的系统 . Apache Camel是一个基于规则的路由和中介引擎,它使用API(或声明性Java域特定语言)提供企业集成模式的基于Java对象的实现,以配置路由和中介规则 .
    详细说明和示例可以在这里找到Apache Camel Tutorials

  • 34

    创建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配置 .

    看到?那不是很难吗?

  • 110

    到底是什么?

    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 .

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

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

    看看这个article作者Anirban Konar的一个实时用例 .

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

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

    这是一个独立的计划吗?

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

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

  • 623

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

  • 11

    基于类比

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

    “您的航空公司”的目的是将“乘客”从一个“城市”“携带”到另一个“城市” . 您使用波音,空中客车,HAL等不同“飞机公司”的飞机来运送乘客 .

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

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

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

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

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

    Lets replace few words/phrases used above with following:

    您的航空公司:Apache Camel

    飞机公司:运输机制

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

    携带:路线

    乘客:消息;

    城市:系统;

    机场:骆驼组件;

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

    离开: 生产环境 , 生产环境

    到达:消费,消费

    旅行:路由

    设施:提供

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

    Purpose of 'Apache Camel' 是将'messages'从一个'system'路由到另一个'system' . Apache Camel使用不同的传输机制进行消息路由 .

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

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

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

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

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

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

  • 7

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

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

  • 5

    它像一条管道连接

    From---->To
    

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

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

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

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

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

  • 8

    如果你有5到10分钟,我通常建议人们阅读Jonathan Anstey的这篇文章 . 它是_193765的概念,它实现了一个带有代码示例的用例 . 在其中,乔纳森写道:

    Apache Camel是一个开源Java框架,专注于使开发人员更容易集成和访问 . 它通过以下方式实现:所有广泛使用的企业集成模式(EIP)与各种传输和API的连接的具体实现,易于使用领域特定语言(DSL)将EIP和传输连接在一起

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

  • 0

    简而言之:

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

    为了做到这一点:

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

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

    Camel将帮助您:

    • 使用任何来源/格式的数据

    • 处理此数据

    • 将数据输出到任何源/格式

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

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

  • 65

    Camel从A发送消息到B:

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

    • 许多发件人和许多接收者

    • 十几个协议( ftphttpjms 等)

    • 许多复杂的规则

    • 仅向接收方A和B发送消息A.

    • 向接收方C as XML 发送消息B,但部分 translate 它, enrich 它(添加元数据)和 IF condition X ,然后将其发送到接收方D,但 as CSV .

    所以现在你需要:

    协议之间

    • translate

    • glue 组件在一起

    • 定义路线 - what goes where

    • filter 在某些情况下有些事情

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

    使用酷炫的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(正如其他人所说,这是一本很好的书!)

  • 46

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

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

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

    就像四人帮一样,Gregor Hohpe和Bobby Woolf撰写了这本书,他们提出并记录了一套新的模式和蓝图,用于我们如何最好地设计基于组件的大型系统,其中组件可以在其上运行相同的过程或在不同的机器上 .

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

    So what is Apache Camel?

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

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

    这正是Apache Camel对EIP的看法 . It's a complete production-ready framework for people who want to implement their solution to follow the EIPs.

  • 973

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

    它使用Routes;可以描述为:

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

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

  • 2

    另一个角度的定义:

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

  • 14

    这是另一种尝试 .

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

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

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

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

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

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

  • 4

    计算机中的大多数事情都不仅仅是一个已经很好理解的东西的神秘包装 . 当他们通常因为某人决定发明新的语言术语或为不同的目的而殖民现有的术语时(一个很好的例子就是X开发人员颠倒了"client"和"server"的意思 . )

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

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

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

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

    希望有所帮助 .

  • 23

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

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

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

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

    • 它提供了许多DSL的编码,即基于Java DSL和基于Spring xml的DSL,它们很受欢迎 .

    • 易于使用且易于使用 .

    • Fuse IDE是一款可帮助您通过UI进行编码的产品

  • 3

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

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

    HTH

  • 641

    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 endpoints ,该 endpoints 又调用外部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>
    

    来你的问题

    • 究竟是什么? Ans: - 这是一个实现企业集成模式的框架

    • 它如何与用Java编写的应用程序交互? Ans: - 它可以与任何可用的协议进行交互,如http,ftp,amqp等

    • 它与服务器一起出现了什么? Ans: - 它可以部署在像tomcat这样的容器中,也可以作为java进程独立部署

    • 这是一个独立的计划吗?答: - 可以 .

    希望能帮助到你

  • 47

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

    enter image description here

  • 1

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

    为了给您一个透视图,下面给出的Java DSL将创建一个REST endpoints ,该 endpoints 将能够接受由产品列表组成的XML并将其拆分为多个产品并使用它调用BrandProcessor的Process方法 . 只需添加.parallelProcessing(注意注释部分),它将并行处理所有产品对象 . (产品类是JAXB / XJC产生从输入XML仅限于XSD的Java存根) . 这多少代码(除了少数骆驼沿着依赖),将得到以往需要的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

  • 6

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

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

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

相关问题