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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370082.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android studio smssdk,SMSSDK for Android 配置

1.集成之前先要申请Mob的appkey与appsecret2.在Mob官网下载最新SDK&#xff0c;解压后会看到以下目录结构&#xff1a;SMSSDK下存放的是短信SDK的全部内容。3.在android studio中加入SMS的第三方库AS版本的SMSSDK目录下包含以下内容&#xff1a;MobCommons.jar&#xff1a;Mob …

JavaScript总结(3)

第3章 获取用户的输入 &#xff1c;script&#xff1e;10 intAprompt("请输入第一个数字","");11 intBprompt("请输入第二个数字",27);默认是2712 document.write("你输入的第一个数字是"intA);13 document.write("&#xff1c;…

android listview 开发,android开发之ListView实现

今天又初步学习了一下ListView控件&#xff0c;看看效果如下&#xff1a;LisViewActivity.java源码&#xff1a;package com.jinhoward.UI_listview;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.os.Bundl…

Less 的用法

1. node.js node.js是一个前端的框架 自带一个包管理工具npm node.js 的安装 官网&#xff1a;http://nodejs.cn/ 在命令行检验是否安装成功 切换到项目目录&#xff0c;初始化了一个package.json文件 安装与卸载jQuery包&#xff08;例子&#xff09; 安装 卸载 安装淘宝…

浅谈springboot整合ganymed-ssh2远程访问linux

环境介绍 技术栈 springbootmybatis-plusmysqlganymed-ssh2 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 1.8 Spring Boot 2.7.13 mybatis-plus 3.5.3.2 SSH(远程连接工具)连接原理&#xff1a;ssh服务是一个守护进程(demon)&#xff0c;系统后台监听客户…

android pick file,LFilePicker---文件选择利器,各种样式有它就够了

LFilePicker在 Android 开发中如果需要选择某个文件&#xff0c;可以直接调取系统的文件管理器进行选择&#xff0c;但是无法保证各个厂商的手机界面一致&#xff0c;而且解析Uri 还比较繁琐&#xff0c;如果还需要多选呢&#xff1f;需要文件类型过滤呢&#xff1f;老板说界面…

在JVM之下–类加载器

在许多开发人员中&#xff0c;类加载器是Java语言的底层&#xff0c;并且经常被忽略。 在ZeroTurnaround上 &#xff0c;我们的开发人员必须生活&#xff0c;呼吸&#xff0c;饮食&#xff0c;喝酒&#xff0c;并且几乎与类加载器保持亲密关系&#xff0c;才能生产JRebel技术&a…

matplotlib绘制饼状图

源自http://blog.csdn.net/skyli114/article/details/77508430?ticketST-41707-PzNbUDGt6R5KYl3TkWDg-passport.csdn.net pyplot使用plt.pie()来绘制饼图 1 import matplotlib.pyplot as plt 2 labels frogs, hogs, dogs, logs 3 sizes 15, 20, 45, 10 # [15,20,45,10…

自适应宽度元素单行文本省略用法探究

单行文本省略是现代网页设计中非常常用的技术&#xff0c;几乎每个站点都会用到。单行文本省略适用于显示摘要信息的场景&#xff0c;如列表标题、文章摘要等。在响应式开发中&#xff0c;自适应宽度元素单行文本省略容易失效不起作用&#xff0c;对网页开发这造成困扰。因此&a…

P3390 【模板】矩阵快速幂

题目背景 矩阵快速幂 题目描述 给定n*n的矩阵A&#xff0c;求A^k 输入输出格式 输入格式&#xff1a; 第一行&#xff0c;n,k 第2至n1行&#xff0c;每行n个数&#xff0c;第i1行第j个数表示矩阵第i行第j列的元素 输出格式&#xff1a; 输出A^k 共n行&#xff0c;每行n个数&…

c#精彩编程200例百度云_永安市教育局被授予“人工智能编程教育试验区”

11月28日&#xff0c;“第二届人工智能与机器人教育大会青少年人工智能与编程教育主题论坛”在厦门召开。永安市教育局被中国教育发展战略学会人工智能与机器人教育专委会授予“人工智能编程教育试验区”牌匾&#xff0c;巴溪湾小学、西门小学、三中、一中附属学校、实验小学等…

Spring Data JPA和分页

让我们从支持分页的经典JPA方法开始。 考虑一个简单的域类–一个具有名字&#xff0c;姓氏的“成员”。 为了支持在成员列表上进行分页&#xff0c;JPA方法是支持一种查找器&#xff0c;该查找器将获取第一个结果&#xff08;firstResult&#xff09;的偏移量和要检索的结果&am…

Windows环境下安装、卸载Apache

安装Apache 服务 打开 Apcahe的目录 &#xff0c;打开bin目录&#xff0c; 如&#xff1a;E:\wamp\Apache24\bin &#xff0c;打开目录&#xff0c;Shift键 鼠标右键 &#xff0c; 点击 在此处打开命令窗口或者W快捷键直接到此处&#xff0c; 也可以Window键r&#xff0c;输入…

css清浮动

我们在平常做项目的时候&#xff0c;float这个css属性经常会用到。元素浮动会让元素脱离文档流&#xff0c;从而不能撑开父级的内容。今天我将展示常见的清除浮动的方法。 什么是浮动 浮动元素脱离文档流并且向左或者向右移动&#xff0c;直到浮动元素的边缘碰到父级框或者另…

DirectX11 学习笔记7 - 支持自由移动的摄像机

如今将又一次制定一个camera摄像机。能够自由移动。比方前进 后退&#xff0c;上游 下潜。 各个方向渲染之类的。 首先设置按键。 这个时候须要在 XWindow.h 里面 bool XWindow::frame() {//推断是否按下ESC键if(x_input->isKeyDown(VK_ESCAPE))return false;//假设A,S,D,W,…

腾讯吃鸡 android,腾讯吃鸡手游《光荣使命》正式上线:安卓/iOS不限号测试

IT之家11月29日消息 今天下午&#xff0c;腾讯首款百人战术竞技手游《光荣使命》在安卓、iOS双平台正式上线&#xff0c;开启全面测试。(官网下载&#xff1a;点此链接&#xff0c;双平台已开放下载。)该游戏采用第三人称射击视角&#xff0c;玩家化身参与“使命行动”军事演习…

lazada铺货模式的选品_lazada小白的运营难点→铺货与精细化运营的优劣势详解

lazada是铺货还是精细化经营第一种铺货铺货作为平台早期都是比较受欢迎的&#xff0c;平台的蛮荒期&#xff0c;成长期当中&#xff0c;铺货的商家是非常受欢迎的&#xff0c;因为平台需要更多SKU产品&#xff0c;去吸引买家&#xff0c;铺货这个时候是最好的也是能最快的成长起…

excel数据生成sql insert语句

excel数据生成sql insert语句 excel表格中有A、B、C三列数据&#xff0c;希望导入到数据库users表中&#xff0c;对应的字段分别是name,sex,age 。 在你的excel表格中增加一列&#xff0c;利用excel的公式自动生成sql语句&#xff0c;方法如下&#xff1a; 1、增加一列&#xf…

重载,覆盖,隐藏

转载于:https://www.cnblogs.com/jhcelue/p/7145525.html

荣耀鸿蒙系统开机动画,荣耀赵明:鸿蒙系统首发设备欲屏蔽开机广告

来源&#xff1a;硅谷分析狮余承东表示8月9日会发布鸿蒙系统&#xff0c;而从他透露的一些细节看&#xff0c;鸿蒙系统将首先运用在智慧屏终端上&#xff0c;其配合大屏幕和自研芯片(麒麟AI芯片&#xff0c;鸿鹄智慧显示芯片&#xff0c;凌霄WIFI芯片)&#xff0c;将实现生态上…