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 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入门相关推荐
- Apache Camel入门教程
Apache Camel入门教程 本文我们学习Apache Camel,介绍基本概念并重点探讨消息路由.从基本概念和术语开始,然后通过介绍两种方式定义路由----java dsl 和 Spring d ...
- 使用Java的Apache Camel入门
Apache Camel是一个非常有用的库,可以帮助您处理来自许多不同来源的事件或消息. 您可以通过许多不同的协议(例如在VM,HTTP,FTP,JMS甚至DIRECTORY / FILE之间)移动这 ...
- apache camel_使用Java的Apache Camel入门
apache camel Apache Camel是一个非常有用的库,可以帮助您处理来自许多不同来源的事件或消息. 您可以通过许多不同的协议(例如在VM,HTTP,FTP,JMS甚至DIRECTORY ...
- apache camel 相关配置_Apache Camel的Java编程入门指南
Apache Camel是一个非常实用的规则引擎库,能够用来处理来自于不同源的事件和信息.你可以在使用不同的协议比如VM,HTTP,FTP,JMS甚至是文件系统中来传递消息,并且让你的操作逻辑和传递逻 ...
- apache camel_Apache Camel入门
apache camel 在先前的博文中,我们了解了企业集成模式(EIP). 现在,在这篇文章中,我们将研究实现这些模式的Apache Camel框架. 关于骆驼: Apache Camel是一个开放 ...
- Apache Camel框架入门示例
2019独角兽企业重金招聘Python工程师标准>>> Apache Camel是Apache基金会下的一个开源项目,它是一个基于规则路由和中介引擎,提供企业集成模式的Java对象的 ...
- 架构设计:系统间通信(36)——Apache Camel快速入门(上)
1.本专题主旨 1-1.关于技术组件 在这个专题中,我们介绍了相当数量技术组件:Flume.Kafka.ActiveMQ.Rabbitmq.Zookeeper.Thrift .Netty.DUBBO等 ...
- 架构设计:系统间通信(39)——Apache Camel快速入门(下2)
======================== (接上文:<架构设计:系统间通信(38)--Apache Camel快速入门(下1)>) 4-2-1.LifecycleStrategy ...
- Apache Camel简介与入门
Apache Camel 是一个基于知名的企业应用模式(Enterprise Integration Patterns)多功能的整合框架. StackOverflow上有很多学习Apache Came ...
最新文章
- linux手写数字识别opencv,opencv实现KNN手写数字的识别
- Android studio ocr初级app开发问题汇总(含工程代码)
- 关于Android的一些设计【转】
- XHTML标签的嵌套规则
- 转行做产品经理需要学什么?
- linux下qt对csv文件读取,qt 写入csv文件
- 开源监控解决方案Nagios+Cacti+PNP4Nagios+NConf+NDOUtils+Nagvis(九)NagVis安装
- vue和iview应用中的一些问题(持续更新)
- 终生学习,是我们不被时代淘汰最大的财富
- 最新基于高德地图的android进阶开发(6)感兴趣点(POI)周边搜索源码浅析
- 开放报名 | “2021 年全国人工智能大赛”正式开赛
- java蓝桥杯练习 学做菜
- HTML防止input回车提交表单
- Revit二次开发之技能篇(一)———轴网自动对齐
- TopCoder Arena 插件配置(1)Greed 2.0
- 办理公司经营贷款需要什么条件呢?-民兴商学院
- 求约数java_最多约数问题(Java)
- 2018年2月1日的工作总结
- matlab grp2idx函数
- 支付宝接口 java_JAVA调用支付宝的直充接口
热门文章
- centos普通用户修改文件权限_用户管理(特殊权限、特殊属性、umask 默认权限 )
- SpringBoot整合Redis要注意的那些
- stream分组计数_Java Stream:第2部分,计数始终是计数吗?
- 易流即时配送_即时大数据流处理=即时风暴
- 使用Open Liberty的开发模式最大程度地缩短周转时间
- html5中meter讲解_Java中的得墨meter耳定律–最少知识原理–实际示例
- 服务器日志记录_5种改善服务器日志记录的技术
- MongoDB索引策略和索引类型
- undertow服务器分析_进入Undertow Web服务器
- 新的DMN编辑器预览