apache camel_Apache Camel入门

apache camel

在先前的博文中,我们了解了企业集成模式(EIP)。 现在,在这篇文章中,我们将研究实现这些模式的Apache Camel框架。

关于骆驼:

Apache Camel是一个开放源代码项目,已有将近5年的历史,并且拥有大量的用户社区。 该框架的核心是一个引擎,它负责中介工作并将消息从一个系统路由到另一个系统。 在外围,它具有大量组件,可以与使用各种协议(例如FTP,RPC,Webservices,HTTP,JMS,REST等)的系统接口。 它还提供了Java,Spring和Scala中易于理解的领域特定语言。

现在让我们开始使用Apache骆驼。 我们将使用maven设置项目,为所需的骆驼库添加依赖关系,并使用Java和Spring DSL编写示例。

考虑一个接受两种类型订单的系统。 小部件和小工具。 订单到达JMS队列,并以XML格式指定。 小工具清单会轮询文件目录中的传入订单,而小部件清单会在队列上侦听。 我们对所有到达的订单运行XPath,并确定它们是属于小部件还是小工具库存。 下图描述了我们的用例:

首先,只需在目录中打开命令行窗口,然后键入mvn archetype:generate

"c:\myprojects>mvn archetype:generate

假设我们的路径中有Maven 2+和jdk 1.6版本,同样要运行此示例,我们需要一个activemq代理。

我们将在pom中添加以下依赖项

org.apache.camel : camel-core : 2.10.1
- Lib containing Camel engine

org.apache.camel : camel-ftp : 2.10.1
- Camel's ftp component

org.apache.activemq : activemq-camel : 5.6.0
org.apache.activemq : activemq-pool : 5.6.0
- Libs required to integrate camel with activemq

log4j : log4j : 1.2.16
org.slf4j : slf4j-log4j12 : 1.6.4
- Libs for logging

完整的pom.xml粘贴在该要点条目上。

现在,让我们的骆驼路线编码,该路线将轮询JMS队列,应用XPath找出订单是用于小工具清单还是小部件清单,然后将其路由到FTP目录或JMS队列。

到达我们系统的订单具有以下结构

<xml version="1.0" encoding="UTF-8"> 
 <order>
 <product>gadget</product>
 <lineitems>
  <item>cdplayer</item>
  <qty>2</qty>
 </lineitems>
 <lineitems>
  <item>ipod-nano</item>
  <qty>1</qty>
 </lineitems>
</order>

product元素的值指定是小工具订单还是小工具订单。 因此,在XPath下方对订单进行应用将使我们决定将该消息路由到何处。/order/product=“ gadget”,然后转发至FTP目录,否则转发至队列。

现在让我们对路由进行编码,为此,需要扩展RouteBuilder(org.apache.camel.builder.RouteBuilder)类并重写它的configure方法。 我们将类命名为JavaDSLMain,并将以下代码放入其configure方法中:

from("activemq:queue:NewOrders?brokerURL=tcp://192.168.64.144:61616")
      .choice().when(xpath("/order/product = 'gadget'"))
  .to("activemq:queue:GadgetOrders?brokerURL=tcp://192.168.64.144:61616")
      .otherwise()
        .to("ftp://192.168.101.3/camel-demo?username=admin&password=admin&binary=true");

这样做之后,现在让我们分析以上路线。 上面的关键字构成了骆驼EIP DSL; 该路线的意图总结如下:

from :这表示从端点获取消息,即consume ,在我们的情况下,这恰好是一个队列。
选择 :这是一个谓词,这里我们应用一个简单的规则。
xpath :这表示将xpath应用于当前消息,xpath的结果为布尔值。 :这告诉骆驼将消息放在端点上,即产生

每个关键字都可以使用一些参数来工作。 例如,from采取端点参数来消费消息,在本例中,它是JMS(activemq)代理上的队列。

请注意,Camel会自动为您进行类型转换,在上述路由中,在应用XPath之前,消息对象已转换为DOM。

我们还将main方法放入此类本身,以快速对其进行测试。 在main方法内部,我们需要实例化一个Camel上下文,该上下文将承载此路由,并且在启动上下文时,Camel将建立路由并开始侦听NewOrders队列。

main方法中包含的代码如下:

CamelContext camelContext = new DefaultCamelContext();
camelContext.addRoutes(new JavaDSLMain());
camelContext.start();
/* wait indefinitely */
Object obj = new Object();
synchronized (obj) {
obj.wait();
}

查看此要点条目以获取完整的代码清单。

使用Camel的另一种方法是使用Spring,Camel路由进入Spring应用程序上下文文件。 不用编写Java代码,我们只使用XML来快速定义路由。 为此,我们需要在Spring上下文文件中导入Camel名称空间并使用
诸如Spring工具套件之类的IDE可以快速构建和编写集成应用程序。

在这个gist条目中检查展示Camel路由的Spring应用程序上下文。将该上下文文件放在META-INF / spring文件夹中,即在我们的maven项目中,它位于/ src / main / resources / META-INF / spring文件夹下。

在顶部,我们导入了Camel的Spring命名空间,该命名空间允许在Spring的应用程序上下文中定义Camel路由,此外,在我们的pom文件中,我们需要添加依赖项以包含Spring bean的依赖关系,以在Spring中识别和实例化Camel引擎。 在下面添加以包括对Spring的Camel支持。

<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring</artifactId>
<version>2.10.1</version>
 </dependency>

Camel提供了一个帮助程序类(org.apache.camel.spring.Main),它可以扫描保存在下面的所有Spring应用程序上下文文件。
META-INF / spring文件夹保存在类路径下。 检查此要点,显示所需的代码。
通过这个示例,我们实现了基于内容的路由器模式,该模式检查消息的内容以进行路由决策。

参考:来自NS.Infra博客的JCG合作伙伴 Abhishek Jain的Apache Camel入门

翻译自: https://www.javacodegeeks.com/2012/12/getting-started-with-apache-camel.html

apache camel

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值