File 文件入站通道适配器未创建消息

File 文件入站通道适配器未创建消息,file,adapter,spring-integration,File,Adapter,Spring Integration,我们正在开发一个使用Spring集成和Rabbit MQ的POC。我们有两个模块生产者模块和消费者模块,它们都运行在不同的JVM中。当新文件到达时,Producer模块会监听一个文件夹(输入文件夹),创建一条消息,然后推送到(incoming.q.in)队列,并移动到process文件夹 在producer模块中,我们有以下代码。当我在传入文件夹中放入大约100个文件时,大约有90个文件已处理并移动到进程文件夹,但有10个文件未移动到进程文件夹 对于失败的情况,这些是日志文件中的消息

我们正在开发一个使用Spring集成和Rabbit MQ的POC。我们有两个模块生产者模块和消费者模块,它们都运行在不同的JVM中。当新文件到达时,Producer模块会监听一个文件夹(输入文件夹),创建一条消息,然后推送到(incoming.q.in)队列,并移动到process文件夹

在producer模块中,我们有以下代码。当我在传入文件夹中放入大约100个文件时,大约有90个文件已处理并移动到进程文件夹,但有10个文件未移动到进程文件夹

对于失败的情况,这些是日志文件中的消息

     ....
[07/30/13 07:34:23:023 EDT][taskExecutor-3]调试org.springframework.integration.file.FileReadingMessageSource已添加到队列:[test.xml] [07/30/13 07:34:23:023 EDT][taskExecutor-3]调试org.springframework.integration.endpoint.SourcePollingChannelAdapter在轮询期间未收到任何消息,返回“false”

       .... 
成功案例

       ....
[07/30/13 07:34:32:032 EDT][taskExecutor-1]调试org.springframework.integration.file.FileReadingMessageSource已添加到队列:[test_0.xml] [07/30/13 07:34:32:032 EDT][taskExecutor-1]INFO org.springframework.integration.file.FileReadingMessageSource创建的消息:[[Payload=/apps/incoming/test_0.xml][Headers={timestamp=1375184072466,id=d8d4cea4-a25d-4869-b287-e76cfb76f554}]

        ....
这是密码

<file:inbound-channel-adapter id="inboundAdapter" channel="inboundChannel" directory="file:${incoming_folder}" prevent-duplicates="true" filename-pattern="*.*" auto-startup="true"  >
    <int:poller id="fileInboudPoller" fixed-rate="3" receive-timeout="3" time-unit="SECONDS" max-messages-per-poll="1" task-executor="taskExecutor"/>
    <file:nio-locker /> 
</file:inbound-channel-adapter>

这通常意味着锁柜无法锁定文件(可能是因为文件在其他地方使用)

顺便说一句,像这样的应用程序的一个常见错误是“就地”复制文件,这样消费者可能会看到不完整的文件


避免这些问题的一种常见方法是使用临时名称复制文件,并仅在文件完全写入后对其进行重命名。

谢谢。这些文件是由不同的系统生成的。我们将尝试使用临时文件名方法,并让您知道结果。