在先前的博文中,我们了解了企业集成模式(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 engineorg.apache.camel : camel-ftp : 2.10.1
- Camel's ftp componentorg.apache.activemq : activemq-camel : 5.6.0
org.apache.activemq : activemq-pool : 5.6.0
- Libs required to integrate camel with activemqlog4j : 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元素的值指定是gadget还是小部件订单。 因此,在订单的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应用程序上下文文件。 我们只使用XML来快速定义路由,而不是编写Java代码。 为此,我们需要在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入门相关推荐

  1. Apache Camel入门教程

    Apache Camel入门教程 本文我们学习Apache Camel,介绍基本概念并重点探讨消息路由.从基本概念和术语开始,然后通过介绍两种方式定义路由----java dsl 和 Spring d ...

  2. 使用Java的Apache Camel入门

    Apache Camel是一个非常有用的库,可以帮助您处理来自许多不同来源的事件或消息. 您可以通过许多不同的协议(例如在VM,HTTP,FTP,JMS甚至DIRECTORY / FILE之间)移动这 ...

  3. apache camel_使用Java的Apache Camel入门

    apache camel Apache Camel是一个非常有用的库,可以帮助您处理来自许多不同来源的事件或消息. 您可以通过许多不同的协议(例如在VM,HTTP,FTP,JMS甚至DIRECTORY ...

  4. apache camel 相关配置_Apache Camel的Java编程入门指南

    Apache Camel是一个非常实用的规则引擎库,能够用来处理来自于不同源的事件和信息.你可以在使用不同的协议比如VM,HTTP,FTP,JMS甚至是文件系统中来传递消息,并且让你的操作逻辑和传递逻 ...

  5. apache camel_Apache Camel入门

    apache camel 在先前的博文中,我们了解了企业集成模式(EIP). 现在,在这篇文章中,我们将研究实现这些模式的Apache Camel框架. 关于骆驼: Apache Camel是一个开放 ...

  6. Apache Camel框架入门示例

    2019独角兽企业重金招聘Python工程师标准>>> Apache Camel是Apache基金会下的一个开源项目,它是一个基于规则路由和中介引擎,提供企业集成模式的Java对象的 ...

  7. 架构设计:系统间通信(36)——Apache Camel快速入门(上)

    1.本专题主旨 1-1.关于技术组件 在这个专题中,我们介绍了相当数量技术组件:Flume.Kafka.ActiveMQ.Rabbitmq.Zookeeper.Thrift .Netty.DUBBO等 ...

  8. 架构设计:系统间通信(39)——Apache Camel快速入门(下2)

    ======================== (接上文:<架构设计:系统间通信(38)--Apache Camel快速入门(下1)>) 4-2-1.LifecycleStrategy ...

  9. Apache Camel简介与入门

    Apache Camel 是一个基于知名的企业应用模式(Enterprise Integration Patterns)多功能的整合框架. StackOverflow上有很多学习Apache Came ...

最新文章

  1. linux手写数字识别opencv,opencv实现KNN手写数字的识别
  2. Android studio ocr初级app开发问题汇总(含工程代码)
  3. 关于Android的一些设计【转】
  4. XHTML标签的嵌套规则
  5. 转行做产品经理需要学什么?
  6. linux下qt对csv文件读取,qt 写入csv文件
  7. 开源监控解决方案Nagios+Cacti+PNP4Nagios+NConf+NDOUtils+Nagvis(九)NagVis安装
  8. vue和iview应用中的一些问题(持续更新)
  9. 终生学习,是我们不被时代淘汰最大的财富
  10. 最新基于高德地图的android进阶开发(6)感兴趣点(POI)周边搜索源码浅析
  11. 开放报名 | “2021 年全国人工智能大赛”正式开赛
  12. java蓝桥杯练习 学做菜
  13. HTML防止input回车提交表单
  14. Revit二次开发之技能篇(一)———轴网自动对齐
  15. TopCoder Arena 插件配置(1)Greed 2.0
  16. 办理公司经营贷款需要什么条件呢?-民兴商学院
  17. 求约数java_最多约数问题(Java)
  18. 2018年2月1日的工作总结
  19. matlab grp2idx函数
  20. 支付宝接口 java_JAVA调用支付宝的直充接口

热门文章

  1. centos普通用户修改文件权限_用户管理(特殊权限、特殊属性、umask 默认权限 )
  2. SpringBoot整合Redis要注意的那些
  3. stream分组计数_Java Stream:第2部分,计数始终是计数吗?
  4. 易流即时配送_即时大数据流处理=即时风暴
  5. 使用Open Liberty的开发模式最大程度地缩短周转时间
  6. html5中meter讲解_Java中的得墨meter耳定律–最少知识原理–实际示例
  7. 服务器日志记录_5种改善服务器日志记录的技术
  8. MongoDB索引策略和索引类型
  9. undertow服务器分析_进入Undertow Web服务器
  10. 新的DMN编辑器预览