- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一位客户通过 ftp 将文件传输到我们的服务器。我定义了一条路线,用于从此目录中选择某些文件并将它们移动到不同的目录进行处理。问题是它一看到它就把它拿走,而不是等到 ftp 完成。结果是 to uri 中描述的路径中的 0 字节文件。我已经尝试了每个 readLock 选项(masterFile、rename、changed、fileLock),但都没有用。我正在使用 spring DSL 来定义我的 Camel 路线。这是一个不起作用的例子。 Camel 版本是2.10.0
<route>
<from uri="file:pathName?initialDelay=10s&move=ARCHIVE&sortBy=ignoreCase:file:name&readLock=fileLock&readLockCheckInterval=5000&readLockTimeout=10m&filter=#FileFilter" />
<to uri="file:pathName/newDirectory/" />
</route>
如有任何帮助,我们将不胜感激。谢谢!
请注意...有一次这条路线在另一台服务器上运行,我不得不将文件通过 ftp 传输到另一台处理它的服务器。当我在 Camel 中使用 ftp 组件时,该路由工作正常。那就是在执行 ftp 之前它确实等到收到文件。我在定义的路线上有相同的选项。这就是为什么我认为应该有一种方法可以做到这一点,因为 ftp 组件使用 camel 中的文件组件选项。
我采纳了@PeteH 的建议 #2 并执行了以下操作。我仍然希望有另一种方法,但这会奏效。
我添加了以下方法,该方法返回一个日期为 current.minus(x seconds)
public static Date getDateMinusSeconds(Integer seconds) {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, seconds);
return cal.getTime();
}
然后在我的过滤器中检查初始过滤是否正确。如果是,我将上次修改日期与 getDateMinusSeconds() 进行比较。如果比较结果为真,我会为过滤器返回一个假值。
if(filter){
if(new Date(pathname.getLastModified()).after(DateUtil.getDateMinusSeconds(-30))){
return false;
}
}
最佳答案
我没有在您的环境中执行过任何此类操作,但之前使用 FTP 时遇到过此类问题。
我可以建议的两个更好的选择是让客户发送两个文件。 File1 是他们的数据,File2 可以是任何东西。他们按顺序发送。您在 File2 到达时设陷阱,但您所做的只是将其用作 File1 已安全到达的“信号”。
不太好的选择(这是我们最终实现的一个,因为我们无法控制正在发送的文件)是编写您的代码,这样您拒绝处理任何文件,直到其最后修改的时间戳至少为 < em>x 分钟前。我想我们定下了 5 分钟。这非常可怕,因为您实际上是在开火、检查、 hibernate 、检查等等。
但是您描述的问题在 FTP 中是众所周知的。就像我说的,我不知道这两种方法中的任何一种是否适用于您的环境,但在较高的水平上它们肯定是合理的。
关于java - Camel 路线在ftp完成之前拾取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13844564/
我有两种类型的路由 Public 和 Private。 只有用户登录后才能访问所有私有(private)路由: return tokenService.token ? ( <>
我已按照 Laravel 5.5 文档在我们的应用程序上要求、安装和配置 Laravel Passport。我们仅使用密码授予功能,因为我们不打算将其用作社交登录工具。但是,按照所有说明操作后,我在尝
我想设置事件菜单项的样式,为此我需要将当前 url 与路由进行比较。我知道我可以在 javascript 中做到这一点,但我想知道其他人是如何解决这个问题的。 有什么建议么? 伪代码: My Page
我正在尝试在浏览器上以图形方式显示路径/路线以供客户查看。例如,基于 txt 或 XML 文件,包含说明。 4 90 5 90 2 或 F4,L90,F5,L90,F2 相当于
我创建了一个中间件来阻止我的 laravel 应用程序中的某些路由,但不起作用,无法弄清楚我做错了什么,这是我的代码: ps:我使用的是 laravel 5.2 路线: Route::get('sec
我正在使用 Java 工作。给定一个矩阵 NxM,我需要找到通过该数组的所有可能路径。只允许斜向上或斜向下,或向右斜行。 4x4 矩阵示例: 3 5 7 9 2 4 6 8 9 3 7
我是 Marionette 新手,只是找不到上类路线。 我正在使用 Marionette 的 2.4.1 版本,并尝试以最简单的方式进行操作,以便它能够正常工作。 此代码适用于旧版本的 Marione
我是 AngularJS 的新手。我正在尝试从这个网站( https://docs.angularjs.org/tutorial/step_07 )学习 AngularJS。我的代码如下 index.
我在 yandexmapkit-android 项目上工作。图书馆链接是 https://github.com/yandexmobile/yandexmapkit-android 文档非常薄弱,git
我正在阅读有关 Angular 路由的文档并创建了一个简单的测试: const routes: Route[] = [ { path: '', redirectTo: '/home', pat
我正在开发一项服务 (spring-boot),它获取一个 ID 列表,一个一个地从数据库中获取对象,将这些对象聚合成批处理,然后将它们保存在其他地方。目前,聚合后的批量大小约为 50 个对象,大约每
我正在制作一个网站,在用户登录后,用户将被重定向到主页。网站的主页和所有其他页面只能由登录用户访问,但即使在用户登录后(firebase auth),网站的其余部分( protected 路由)仍然无
我有一个惰性模块,我希望在桌面和移动设备上有不同的体验。基本上我想要我的桌面布局如下: Component1 显示一个列表,用户在列表中选择一个项目,component2 将显示详细信息。我创建了名为
我是 Angular 的新手,我正在尝试让我的路由器工作。基本上我在 / 有一个主页,其中有一个到 /courses 的路由器链接,它运行良好,但是当我重新加载 /courses 时(或输入地址in)
完整的 Mojolicious 应用程序有 routes将转储应用程序路由的命令: script/my_app.pl routes 我如何从 Lite 的测试脚本中做同样的事情应用? use Mojo
我有一个 Camel 2.13.1 应用程序,它使用我通过 CXF 组件访问的外部 Web 服务。我使用 Spring XML 路由元素的 startupOrder 属性来确保在我设置为在启动时调用一
我们有一个在 Karaf 2.4.3 和 Camel 2.15.3 上运行的数据处理应用程序。 在这个应用程序中,我们有一堆导入数据的路由。我们有一个管理 View ,其中列出了这些路由以及每条路由的
我正在尝试组合一个应用程序,我可以在其中查询谷歌路线服务,存储结果以建立缓存,然后根据需要呈现路线。 我可以取回方向数据并将其存储在数据库中就好了,这一切都很好,现在当我在 map 上渲染方向时,我的
我根据 Ryan Bates 的 railscast 使用设计登录创建了一个新项目. 它没有注册路线(与我之前制作的项目不同,步骤完全相同) This image显示了两个“rake 路由”命令。顶
我发现 Google Maps API 通过以下方式支持路线: var map; var directionsPanel; var directions; function initialize()
我是一名优秀的程序员,十分优秀!