perl大骆驼和小骆驼_你好骆驼:自动文件传输

perl大骆驼和小骆驼

Apache Camel在其主页上 (以及Camel用户指南中 )将其描述为“基于已知企业集成模式的通用开源集成框架”。 Camel框架基于《 企业集成模式 》一书,并提供了该书中描述的模式的实现 。 我看一下这篇文章中使用Camel的“ Hello World”类型示例。

Camel网页和用户指南还引用了StackOverflow线程Apache Camel到底是什么? 其中包括对Apache Camel的一些很好的描述。 David Newcomb在那儿描述了骆驼:


Apache Camel是消息传递技术与路由的结合。 它将消息传递的起点和终点连接在一起,从而允许将消息从不同的源传输到不同的目的地。 例如:JMS-> JSON,HTTP-> JMS或渠道FTP-> JMS,HTTP-> JMS,JMS => JSON。

在本文中,我介绍了一种简单的Camel用法,它不需要使用JMS提供程序,甚至不需要FTP或HTTP。 保持简单的示例可以使您更清楚地使用Camel。 本示例使用Camel自动将文件从指定目录传输到其他指定目录。 将演示三种情况。

在第一种情况下,放置在“输入”目录中的文件会自动复制到“输出”目录,而不会影响源文件。 在第二种情况下,放置在“输入”目录中的文件会自动复制到“输出”目录,然后将“输入”目录中的文件存储在“输入”目录下的特殊“ .camel”子目录中。 第三种情况是在复制到“输出”目录(实际上是“移动”操作)后,从“输入”目录中删除文件。 这三种情况都是用几乎相同的代码实现的。 两者之间的唯一区别是在一行中指定了Camel应该如何处理文件传输。

下一个代码清单显示了使用Camel自动将放置在输入目录中的文件复制到Camel所需的基本代码所需的基本代码。

/*** Simple executable function to demonstrate Camel file transfer.* * @param arguments Command line arguments; excepting duration in milliseconds*    as single argument.*/
public static void main(final String[] arguments)
{final long durationMs = extractDurationMsFromCommandLineArgs(arguments);final CamelContext camelContext = new DefaultCamelContext();try{camelContext.addRoutes(new RouteBuilder(){@Overridepublic void configure() throws Exception{from('file:C:\\datafiles\\input?noop=true').to('file:C:\\datafiles\\output');}});camelContext.start();Thread.sleep(durationMs);camelContext.stop();}catch (Exception camelException){LOGGER.log(Level.SEVERE,'Exception trying to copy files - {0}',camelException.toString());}
}

上面的代码演示了对Camel API和Camel的Java DSL支持的最少使用。 CamelContext是用DefaultCamelContext的实例定义的(第10行)。 第13-21行将骆驼路线添加到此实例化的上下文中,第22行开始上下文,第24行停止上下文。 这一切都非常简单,但是对我来说最有趣的部分是第19行的路由规范。

因为实现提供给Camel Context的RoutesBuilder接口的实例只需要重写其抽象configure方法,所以可以很容易地将类实例化为与CamelContext.addRoutes(RoutesBuilder)内联的匿名类。 这是我在上面的代码中所做的,也是在许多在线提供的Camel示例中所做的事情。

第19行显示了高度可读的语法,描述了路由的“从”和“到”部分。 在这种情况下,放置在输入目录(“ from”)中的文件将被复制到输出目录(“ to”)。 “文件”协议可用于“发件人”和“发件人”部分,因为文件系统是“消息”的来源和去向。 “ from”调用中的“?noop = true”表示对“ input”目录中的文件不做任何更改(处理应对源文件产生“ noop”作用)。

如前所述,以上代码中的第19行指示Camel将“输入”目录中已经存在或放置的文件复制到指定的“输出”目录,而不会影响“输入”目录中的文件。 在某些情况下,我可能想“移动”文件而不是“复制”它们。 在这种情况下,当指定“ from”端点时,可以指定?delete=true而不是?noop=true 。 换句话说,上面的第19行可以替换为将文件放置在“输出”目录中时从“输入”目录中删除文件。 如果在输入上未指定任何参数( ?noop=true?delete=true ),则将发生介于两者之间的操作:“ input”目录中的文件将移至该目录下的一个专门创建的新子目录中。 “输入”目录称为.camel 。 接下来将突出显示这三种情况。

从数据文件\输入复制到数据文件\输出的文件,而不会影响原始文件

from('file:C:\\datafiles\\input?noop=true').to('file:C:\\datafiles\\output');

文件从数据文件\输入移至数据文件\输出

from('file:C:\\datafiles\\input?delete=true').to('file:C:\\datafiles\\output');

从datafiles \ input复制到datafiles \ output的文件,并将原始文件移到.camel子目录

from('file:C:\\datafiles\\input').to('file:C:\\datafiles\\output');

附带说明一下,流畅的'from'和'to'的使用是Camel的Java DSL的示例。 Camel通过实现继承(在RouteBuilder类中定义了“ from”和“ to”之类的方法)而不是通过静态导入 ( 通常用于基于Java的DSL的方法) 来实现此目的。

尽管将RouteBuilder匿名实例RouteBuilder给Camel Context是很常见的,但这不是RouteBuilder的。 在某些情况下,拥有扩展RouteBuilder独立类以及将这些扩展类的实例传递给Camel Context的情况是有利的。 我将使用这种方法来演示我之前描述的所有三种情况。 下一个代码清单显示了扩展RouteBuilder的类。 在许多情况下,我将使用无参数构造函数,但在这种情况下,我将使用构造函数来确定骆驼路线应支持哪种类型的文件传输。

下一个代码清单显示了一个命名的独立类,该类处理上述所有三种情况(复制,使用输入文件归档进行复制以及移动)。 RouteBuilder单个扩展在其构造函数中使用一个枚举来确定如何配置输入端点。

package dustin.examples.camel;import org.apache.camel.builder.RouteBuilder;/*** Camel-based Route Builder for transferring files.* * @author Dustin*/
public class FileTransferRouteBuilder extends RouteBuilder
{public enum FileTransferType{COPY_WITHOUT_IMPACTING_ORIGINALS('C'),COPY_WITH_ARCHIVED_ORIGINALS('A'),MOVE('M');private final String letter;FileTransferType(final String newLetter){this.letter = newLetter;}public String getLetter(){return this.letter;}public static FileTransferType fromLetter(final String letter){FileTransferType match = null;for (final FileTransferType type : FileTransferType.values()){if (type.getLetter().equalsIgnoreCase(letter)){match = type;break;}}return match;}}private final String fromEndPointString;private final static String FROM_BASE = 'file:C:\\datafiles\\input';private final static String FROM_NOOP = FROM_BASE + '?noop=true';private final static String FROM_MOVE = FROM_BASE + '?delete=true';public FileTransferRouteBuilder(final FileTransferType newFileTransferType){if (newFileTransferType != null){switch (newFileTransferType){case COPY_WITHOUT_IMPACTING_ORIGINALS :this.fromEndPointString = FROM_NOOP;break;case COPY_WITH_ARCHIVED_ORIGINALS :this.fromEndPointString = FROM_BASE;break;case MOVE :this.fromEndPointString = FROM_MOVE;break;default :this.fromEndPointString = FROM_NOOP;}}else{fromEndPointString = FROM_NOOP;}}@Overridepublic void configure() throws Exception{from(this.fromEndPointString).to('file:C:\\datafiles\\output');}
}

这篇博客文章演示了如何使用Camel轻松地将文件从一个目录路由到另一个目录。 骆驼支持许多其他的传输机制和数据格式,这里没有显示。 骆驼还支持转换要路由的消息/数据的功能,此处也未显示。 这篇文章重点介绍了如何以有用的方式应用Camel的最简单的示例,但是Camel支持的远远超过此简单示例中显示的内容。

参考: Hello Camel:来自JCG合作伙伴 Dustin Marx的“ 实际事件启发”博客中的自动文件传输 。

翻译自: https://www.javacodegeeks.com/2013/02/hello-camel-automatic-file-transfer.html

perl大骆驼和小骆驼

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

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

相关文章

Django实战1-权限管理功能实现-01:搭建开发环境

1 项目开发环境 语言环境: python3.6.2 , django-2.1.2数据库环境:sqlite3(开发环境使用,部署环境使用mysql5.6)开发工具:pycharm2 安装python 说明:已经安装过python3.6环境的可以跳过此步。 python安装包下载地址&a…

matlab imhist灰度直方图

imhist()函数显示图像直方图要求图像是二维的灰度图像。 1.h imhist(I):直接显示灰度图像I的直方图 2.h imhist(I,b):b是用来形成直方图的‘容器’的数目,默认256。 3.h imhist(X,map):显示索引图像的直方图,此直方图显示颜色映射图上色…

python语言程序设计计算机二级难不难_全国计算机二级的难度有多大?

计算机二级任选一科目考试及格即可获取计算机二级证书。自2019年3月考试起,二级语言类及数据库类科目(即除MS Office高级应用外的其他二级科目)调整获证条件为:总分达到60分且选择题得分达到50%及以上(即选择题得分要达到20分及以上)的考生方可取得合格证…

Jacobian 和Hessian矩阵

雅克比(Jacobian matrix)矩阵:目标函数f为一个函数向量,f(f1(x),f2(x),…fm(x))T,自变量x(x1,x2,…,xn)T;函数向量f对x求梯度,结果为一个矩阵;行数为f的维数;列数位x的维…

循环语句 for循环、while循环、do while循环

循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去…

获取按钮点击次数_无限次数使用,不会吧?不会吧?

就目前来说国内设计教程的网站虎课网还是很不错的里面的教程都很丰富但无奈的是普通用户每天只能学习一个课程想要学习多点就要充值而且会员只能开通年费对于只需偶尔学习一下的小伙伴来说可能太浪费了所以今天来大家分享一个超好用的浏览器插件官网看(适用平台:Chr…

现代化历险记:策略+将COBOL转换为Java的示例

在Keyhole Software,我们在很大程度上是一家现代化公司。 我们拥有一些顾问,他们专门研究将旧的代码迁移到新的,翻新的残旧代码库,并为大多数已经被供应商锁定的企业设计更光明的未来。 作为这些经验的有趣的副作用,我…

String类的特点和使用步骤

概述 java.lang.String 类代表字符串。Java程序中所有的字符串文字(例如 "abc" )都可以被看作是实现此类的实例 类 String 中包括用于检查各个字符串的方法,比如用于比较字符串,搜索字符串,提取子字符串以及…

Ostu最大类间差方法

Ostu方法又名最大类间差方法,通过统计整个图像的直方图特性来实现全局阈值T的自动选取,其算法步骤为: 1) 先计算图像的直方图,即将图像所有的像素点按照0~255共256个bin,统计落在每个bin的像素点数量 2) 归一化直方图…

pads 文本不能修改_斜框检测经典网络(文本)- R2CNN

论文题目:R2CNN:Rotational Region CNN for Orientation Robust Scene Text Detection论文来源:2017CVPR论文地址:https://arxiv.org/abs/1706.09579论文代码:https://github.com/DetectionTeamUCAS/R2CNN_Faster-RCNN…

【题解】炮兵阵地

【题解】炮兵阵地 luogu 题解 暴力状压记录上一行和上上行信息,暴力判断是否存在不合法的阵地,暴力滚动数组,暴力统计,暴力转移即可。 看了yyb代码,我感觉我不曾写过代码... 加入说不要那么暴力也可以,可以…

matlab reshape矩阵维度变换

B reshape(A,m,n) 将矩阵A的元素返回到一个mn的矩阵B。如果A中没有mn个元素则返回一个错误。 B reshape(A,m,n,p,...) or B reshape(A,[m n p ...]) 把A中元素进行重塑成mnp…的矩阵,特别地,指定的维数mnp…的积必须与prod(size(A))相同。 …

使用Arquillian测试Spring Data + Spring Boot应用程序(第2部分)

在上一篇文章中 ,我写了关于如何使用Arquillian Cube和 Docker一起测试Spring Data应用程序的信息。 测试看起来像: RunWith(SpringRunner.class) SpringBootTest(classes PingPongController.class, webEnvironment RANDOM_PORT) ContextConfigurati…

OpenCV circle图像上画圆

OpenCV中circle与rectangle函数显示,只不过rectangle在图像中画矩形,circle在图像中画圆。 void circle(Mat img, Point center, int radius, Scalar color, int thickness1, int lineType8, int shift0) img为源图像 center为画圆的圆心坐标 radius…

如何得到长整数逆序后的整数

目录 一 如何得到长整数逆序后的整数注:原创不易,转载请务必注明原作者和出处,感谢支持! 一 如何得到长整数逆序后的整数 最近在写代码遇到这样一个问题:如何得到得到一个长整型数逆序后的长整型数?比如输入…

python网页表格读取_是否可以读取网页html表格数据?

我目前正在考虑一些自动读取网页数据。因此,有没有可能从网页中读取以下类型的表格:excel应该有一个值name of condion,Operator and Expressions。在编辑>>> from urllib import urlopen>>> from bs4 import BeautifulSoup>>&g…

matlab exist()判断目录文件是否存在

if exist(abc.doc,file)0error(display(文件不存在));end判断当前目录中是否存在x文件夹,若不存在则创建if exist(x,dir)0mkdir(x);end

20190608笔试题のCSS-属性继承

以下的CSS属性哪些可以继承?(单选) A. font-sizeB. marginC. widthD. padding emmm,这题答案是A,看到这题我是能选对的,但又不由让我想到一件事情,在全部的CSS属性里有哪些是不可被继承…

群晖套件来源_群晖安装IPKG包管理器及第三方社区安装包步骤

运行环境为群晖DS1517,系统版本为DSM6.2.3。群晖虽然是基于Linux开发的,但与Red Hat或者Ubuntu这样的公开发行版不同,群晖除了官方的图形化包管理器外,并没有提供类似yum或者apt-get等类似包管理器。为了通过命令行安装诸如nano 等…

tf.app.flags和tf.app.run的使用

tf.app.flags和tf.app.run的使用 tf.app.flags主要用于处理命令行参数的解析工作,其实可以理解为一个封装好了的argparse包(argparse是一种结构化的数据存储格式,类似于Json、XML)。 我们通过tf.app.flags来调用这个flags.py文件…