我不明白骆驼到底是干什么的。

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

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

请解释一下骆驼是什么。


当前回答

骆驼从A向B发送消息:

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

许多发送者和许多接收者十几种协议(ftp、http、jms等)许多复杂的规则仅向接收方a和B发送消息a将消息B以XML的形式发送给接收方C,但部分地将其翻译、丰富(添加元数据)和IF条件X,然后也将其以CSV的形式发送到接收方D。

因此,现在您需要:

在协议之间转换将组件粘合在一起定义路线-路线在某些情况下过滤某些内容

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

另请参阅《这和这》和《骆驼在行动》(正如其他人所说,这是一本优秀的书!)

其他回答

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

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

让我们从我们可能已经知道的开始:Singleton模式、Factory模式等;它们只是组织解决问题的方法,但它们本身并不是解决方案。当“四人帮”出版他们的书《设计模式》时,他们为我们其他人分析并提取了这些模式。他们为我们中的一些人节省了大量的精力来思考如何优化代码结构。

与“四人帮”一样,Gregor Hohpe和Bobby Woolf撰写了《企业集成模式》(Enterprise Integration Patterns,EIP)一书,他们在书中提出并记录了一组新的模式和蓝图,说明我们如何最好地设计基于组件的大型系统,其中组件可以在同一进程上运行,也可以在不同的机器上运行。

他们基本上建议我们将系统构造为面向消息的——其中组件之间使用消息作为输入和输出进行通信,而不是其他任何东西。它们向我们展示了一套完整的模式,我们可以从中选择并在不同的组件中实现,这些组件将共同构成整个系统。

那么什么是阿帕奇骆驼?

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

以MVC为例。MVC在理论上非常简单,我们可以在没有任何框架帮助的情况下实现它。但是,好的MVC框架为我们提供了一种随时可用的结构,并且在创建大型MVC项目时,已经考虑到了所有其他需要的“方面”,这就是为什么我们大多数时候都使用它们的原因。

这正是Apache Camel为EIP所做的。这是一个完整的生产就绪框架,适用于希望实施其解决方案以遵循EIP的人员。

用简单的英语来说,camel在没有太多锅炉板代码的情况下完成了很多事情。

为了给您提供一个视角,下面给出的JavaDSL将创建一个REST端点,它将能够接受由产品列表组成的XML,并将其拆分为多个产品,并使用它调用BrandProcessor的Process方法。只需添加.aparallelProcessing(注意注释掉的部分),它就可以并行处理所有产品对象。(产品类是JAXB/XJC从XSD生成的Java存根,输入xml被限制在XSD中。)如此多的代码(加上很少的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

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

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

如果您有5到10分钟的时间,我通常建议大家阅读Jonathan Anstey的《与Apache骆驼的集成》。这是一篇写得很好的文章,对Camel的一些概念进行了简要介绍和概述,并用代码示例实现了一个用例。乔纳森在信中写道:

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

《行动中的骆驼》(Camel in Action,第二版)还有一个免费章节,在第一章中介绍了骆驼。乔纳森和我是那本书的合著者。

骆驼从A向B发送消息:

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

许多发送者和许多接收者十几种协议(ftp、http、jms等)许多复杂的规则仅向接收方a和B发送消息a将消息B以XML的形式发送给接收方C,但部分地将其翻译、丰富(添加元数据)和IF条件X,然后也将其以CSV的形式发送到接收方D。

因此,现在您需要:

在协议之间转换将组件粘合在一起定义路线-路线在某些情况下过滤某些内容

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

另请参阅《这和这》和《骆驼在行动》(正如其他人所说,这是一本优秀的书!)