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

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

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

请解释一下骆驼是什么。


当前回答

简而言之:

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

为了做到这一点:

1) 您可以开发定制程序来完成这项工作(可能会很耗时,很难理解,为其他开发人员维护)

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

骆驼将帮助您:

使用任何来源/格式的数据处理此数据将数据输出到任何源/格式

通过使用ApacheCamel,您将很容易理解/维护/向其他开发人员扩展您的系统。

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

其他回答

从另一个角度定义:

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

简而言之:

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

为了做到这一点:

1) 您可以开发定制程序来完成这项工作(可能会很耗时,很难理解,为其他开发人员维护)

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

骆驼将帮助您:

使用任何来源/格式的数据处理此数据将数据输出到任何源/格式

通过使用ApacheCamel,您将很容易理解/维护/向其他开发人员扩展您的系统。

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

骆驼从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是一个实现所有EIP的集成框架。

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

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

用简单的英语来说,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