Mule 读取通配符文件名的Quartz作业只拾取一个文件

Mule 读取通配符文件名的Quartz作业只拾取一个文件,mule,Mule,使用Mule 3.7。如果我在一个扩展名为.csv的目录中有5个文件,那么下面的代码只选取其中一个文件。如果我移除石英触发器并使其成为普通文件:入站端点,它将拾取所有五个文件。它看起来很简单,但没有达到预期效果。 谢谢, --堂 这是它触发两次后的日志: 信息2015-10-05 15:09:30063[scheduler-quartzcronfilepickup_Worker-1]org.mule.lifecycle.AbstractLifecycleManager:初始化:“fileIn

使用Mule 3.7。如果我在一个扩展名为.csv的目录中有5个文件,那么下面的代码只选取其中一个文件。如果我移除石英触发器并使其成为普通文件:入站端点,它将拾取所有五个文件。它看起来很简单,但没有达到预期效果。
谢谢,
--堂


这是它触发两次后的日志:
信息2015-10-05 15:09:30063[scheduler-quartzcronfilepickup_Worker-1]org.mule.lifecycle.AbstractLifecycleManager:初始化:“fileInConnector.requester.2009817243”。对象是:FileMessageRequester
信息2015-10-05 15:09:30069[scheduler-quartzcronfilepickup_Worker-1]org.mule.lifecycle.AbstractLifecycleManager:开始:“fileInConnector.requester.2009817243”。对象是:FileMessageRequester
信息2015-10-05 15:09:30117[[quartzcronfilepickup].fileUploader.stage1.02]org.mule.api.processor.LoggerMessageProcessor:文件名=D1.csv
信息2015-10-05 15:09:45015[scheduler-quartzcronfilepickup_Worker-2]org.mule.lifecycle.AbstractLifecycleManager:初始化:“fileInConnector.requester.636902426”。对象是:FileMessageRequester
信息2015-10-05 15:09:45016[scheduler-quartzcronfilepickup_Worker-2]org.mule.lifecycle.AbstractLifecycleManager:开始:“fileInConnector.requester.636902426”。对象是:FileMessageRequester

INFO 2015-10-05 15:09:45022[[quartzcronfilepickup].fileUploader.stage1.02]org.mule.api.processor.LoggerMessageProcessor:Filename=D1.csv

使用轮询文件入站端点和石英入站端点轮询文件端点之间有一个主要区别:前者使用消息接收器,后者使用消息请求程序。作为两种不同的动物,它们有可能以完全不同的方式实施

而且,猜猜看,这正是文件的情况。文件消息接收器,以防止轮询正在处理的文件

有趣的是请求者源代码中的这条注释:

// Don't we need to try to obtain a file lock as we do with receiver
这种怀疑和请求者中缺少锁的使用是导致其行为不同于接收者的原因。事实上,这个问题一直没有得到解决,这可能意味着在那里添加锁会产生不希望的副作用


在任何情况下,如果您坚持使用Quartz,我建议您将正在处理的文件移动到另一个目录,以防止重新轮询它。文件终结点应该能够为您执行移动。

请您将Mule logging运行到调试级别,并在Quartz终结点运行几次后将日志添加到您的问题中。我已将日志文件信息添加到我的问题中。谢谢David,您的解释很有意义。从表面上看,我认为它会起作用,但当它失败时,我感到困惑。我将退出并使用Mule请求程序或带有长轮询计时器的文件入站端点。我们将一如既往地感谢您的见解。
// Don't we need to try to obtain a file lock as we do with receiver