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

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

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

请解释一下骆驼是什么。


当前回答

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

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

中间件是在不共享公共语言或数据类型的实体之间提供解释服务的软件的统称。

这就是骆驼的本质。我们可以通过注意它提供了EIP类型的中间件来充实描述。

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

希望这会有所帮助。

其他回答

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

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

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

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

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

那么什么是阿帕奇骆驼?

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

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

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

骆驼从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是一个用于企业集成的Java框架。例如:如果您正在构建一个与许多供应商API交互的web应用程序,我们可以使用骆驼作为外部集成工具。我们可以根据用例做更多的工作。曼宁出版的《骆驼在行动》是一本学习骆驼的好书。集成可以定义如下。

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

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

弹簧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>

回答您的问题

到底是什么?答:这是一个实现企业集成模式的框架它如何与用Java编写的应用程序交互?答:-它可以与任何可用的协议交互,如http、ftp、amqp等它是与服务器一起使用的吗?答:它可以部署在像tomcat这样的容器中,也可以作为java进程独立部署这是一个独立的项目吗?答案:-可能。

希望有帮助

到底是什么?

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

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

看看这篇文章和EIP模式文章

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

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

Java DSL-一种基于Java的DSL,使用流畅的构建器风格。

企业集成模式的故事围绕以下概念展开:

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

看看Anirban Konar的这篇文章,了解其中一个实时用例。

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

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

这是一个独立的项目吗?

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

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

101单词简介

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

扩展简介

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

您实际上不需要将Camel用于将在单个进程或JVM中运行的简单应用程序,这将是过度的。但在概念上,它并不比你自己编写的代码更难。如果您的需求发生变化,业务逻辑和粘合代码的分离会使您更容易长期维护。一旦你学会了骆驼API,你就可以像瑞士军刀一样轻松地使用它,并在许多不同的环境中快速应用它,从而减少你必须编写的自定义代码量。您可以学习一种风格,例如JavaDSL,一种易于链接的流畅API,并轻松选择其他风格。

如果你想做微服务的话,Camel是一个很好的选择。我发现它对于进化体系结构来说是非常宝贵的,因为您可以推迟许多关于协议、传输和其他系统集成问题的艰难、“容易出错”的决策,直到您对问题领域有更多了解。只需关注EIP和核心业务逻辑,并在了解更多信息时切换到具有“正确”组件的新Routes。