Apache camel 处理文件和删除时从Camel配置中获取一些问题

Apache camel 处理文件和删除时从Camel配置中获取一些问题,apache-camel,camel-ftp,Apache Camel,Camel Ftp,处理文件和删除文件时,从Camel配置中获取一些问题。在下面添加了3个用例 目标:使用SFTP读取文件并将其复制到本地目录中。完成后,将其从SFTP位置删除。下面是配置 <from uri="sftp://xxxx@xxxxxx:xxxx/testFolder/ToClient/?password=xxx& delete=true& scheduler=spring& scheduler.cron=0/15+*+*+?+*+MON-SAT& antInclu

处理文件和删除文件时,从Camel配置中获取一些问题。在下面添加了3个用例

目标:使用SFTP读取文件并将其复制到本地目录中。完成后,将其从SFTP位置删除。下面是配置

<from uri="sftp://xxxx@xxxxxx:xxxx/testFolder/ToClient/?password=xxx& delete=true& scheduler=spring& scheduler.cron=0/15+*+*+?+*+MON-SAT& antInclude=*OECExport *.txt"/>
用例3:其中有多个文件

新属性:disconnect=true

属性:

处理:未按预期工作。 警告:

解决了

将.split().body()添加到动态管线定义中。或者您甚至可以将其添加到您的路线中,如下所示

<route id="sftp-processor1" xmlns="http://camel.apache.org/schema/spring">
    <description lang="en">sftp-processor1</description>
    <from uri="sftp://xxx@xxx:xxx/testFolder/ToClient/?password=xxx&stepwise=false&delete=true&scheduler=spring&amp;scheduler.cron=0/15+*+*+?+*+MON-SAT&antInclude=*TestFile*"/>
    <split id="split36">
        <expressionDefinition>body</expressionDefinition>
        <setHeader headerName="CamelFileName" id="setHeader346">
            <simple>${file:name.noext}_${date:now:yyyyMMdd-hhmmss.SSS}.${file:name.ext}</simple>
        </setHeader>
        <to uri="file:/home/test/inbound/?readLock=changed"/>
    </split>
</route>

sftp-processor1
身体
${file:name.noext}{date:now:yyyyMMdd hhmmss.SSS}.${file:name.ext}

尝试使用stepwise=false。如果您使用InputStream或其他方法读取文件内容,请确保关闭它们,以避免泄漏。我尝试使用stepwise=false,但它仍然会给我带来相同的问题。我没有使用任何流来读取文件内容,即使是这样,如果每5分钟进行一次轮询,并且有两个文件,那么在第一次轮询中,它会处理一个带有警告消息的文件,然后在5分钟后,它轮询第二个文件。可能您对该文件的自定义处理正在锁定某些资源,因此文件句柄/流不能自由地在以后删除该文件。
ons                   | 279 - org.apache.camel.camel-ftp - 2.13.0 | JSCH -> Disconnecting from sftp.healthedge.com port 2223
2015-11-23 11:25:30,127 | WARN  | deSFTPAggregator | GenericFileOnCompletion          | 118 - org.apache.camel.camel-core - 2.13.0 | Error during commit. Exchange[OECExport20150901_093233_GET_Remote_ToClient.txt]. Caused by: [org.apache.camel.component.file.GenericFileOperationFailedException - Cannot delete file: testFolder/ToClient/OECExport20150901_093233_GET_Remote_ToClient.txt]
org.apache.camel.component.file.GenericFileOperationFailedException: Cannot delete file: testFolder/ToClient/OECExport20150901_093233_GET_Remote_ToClient.txt
        at org.apache.camel.component.file.remote.SftpOperations.deleteFile(SftpOperations.java:387)[279:org.apache.camel.camel-ftp:2.13.0]
        at org.apache.camel.component.file.strategy.GenericFileDeleteProcessStrategy.commit(GenericFileDeleteProcessStrategy.java:71)[118:org.apache.camel.camel-core:2.13.0]
        at org.apache.camel.component.file.GenericFileOnCompletion.processStrategyCommit(GenericFileOnCompletion.java:124)[118:org.apache.camel.camel-core:2.13.0]
        at org.apache.camel.component.file.GenericFileOnCompletion.onCompletion(GenericFileOnCompletion.java:80)[118:org.apache.camel.camel-core:2.13.0]
        at org.apache.camel.component.file.GenericFileOnCompletion.onComplete(GenericFileOnCompletion.java:54)[118:org.apache.camel.camel-core:2.13.0]
        at org.apache.camel.util.UnitOfWorkHelper.doneSynchronizations(UnitOfWorkHelper.java:100)[118:org.apache.camel.camel-core:2.13.0]
        at org.apache.camel.impl.DefaultUnitOfWork.done(DefaultUnitOfWork.java:228)[118:org.apache.camel.camel-core:2.13.0]
        at org.apache.camel.util.UnitOfWorkHelper.doneUow(UnitOfWorkHelper.java:61)[118:org.apache.camel.camel-core:2.13.0]
        at org.apache.camel.processor.CamelInternalProcessor$UnitOfWorkProcessorAdvice.after(CamelInternalProcessor.java:613)[118:org.apache.camel.camel-core:2.13.0]
        at org.apache.camel.processor.CamelInternalProcessor$UnitOfWorkProcessorAdvice.after(CamelInternalProcessor.java:581)[118:org.apache.camel.camel-core:2.13.0]
        at org.apache.camel.processor.CamelInternalProcessor$InternalCallback.done(CamelInternalProcessor.java:240)[118:org.apache.camel.camel-core:2.13.0]
        at org.apache.camel.processor.Pipeline.process(Pipeline.java:106)[118:org.apache.camel.camel-core:2.13.0]
        at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)[118:org.apache.camel.camel-core:2.13.0]
        at org.apache.camel.component.seda.SedaConsumer.sendToConsumers(SedaConsumer.java:291)[118:org.apache.camel.camel-core:2.13.0]
        at org.apache.camel.component.seda.SedaConsumer.doRun(SedaConsumer.java:200)[118:org.apache.camel.camel-core:2.13.0]
        at org.apache.camel.component.seda.SedaConsumer.run(SedaConsumer.java:147)[118:org.apache.camel.camel-core:2.13.0]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)[:1.7.0_55]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)[:1.7.0_55]
        at java.lang.Thread.run(Thread.java:745)[:1.7.0_55]
Caused by: 4: 
        at com.jcraft.jsch.ChannelSftp.rm(ChannelSftp.java:1952)[278:org.apache.servicemix.bundles.jsch:0.1.50.1]
        at org.apache.camel.component.file.remote.SftpOperations.deleteFile(SftpOperations.java:384)[279:org.apache.camel.camel-ftp:2.13.0]
        ... 18 more
Caused by: java.io.IOException: inputstream is closed
        at com.jcraft.jsch.ChannelSftp.fill(ChannelSftp.java:2871)[278:org.apache.servicemix.bundles.jsch:0.1.50.1]
        at com.jcraft.jsch.ChannelSftp.header(ChannelSftp.java:2895)[278:org.apache.servicemix.bundles.jsch:0.1.50.1]
        at com.jcraft.jsch.ChannelSftp.rm(ChannelSftp.java:1934)[278:org.apache.servicemix.bundles.jsch:0.1.50.1]
        ... 19 more
2015-11-23 11:25:30,128 | INFO  | edge.com session | SftpOperations                   | 279 - org.apache.camel.camel-ftp - 2.13.0 | JSCH -> Caught an exception, leaving main loop due to Socket closed
2015-11-23 11:25:30,129 | WARN  | edge.com session | eventadmin                       | 223 - org.apache.felix.eventadmin - 1.3.2 | EventAdmin: Exception: java.lang.InterruptedException
java.lang.InterruptedException
        at EDU.oswego.cs.dl.util.concurrent.LinkedQueue.offer(Unknown Source)[223:org.apache.felix.eventadmin:1.3.2]
        at EDU.oswego.cs.dl.util.concurrent.PooledExecutor.execute(Unknown Source)[223:org.apache.felix.eventadmin:1.3.2]
        at org.apache.felix.eventadmin.impl.tasks.DefaultThreadPool.executeTask(DefaultThreadPool.java:101)[223:org.apache.felix.eventadmin:1.3.2]
        at org.apache.felix.eventadmin.impl.tasks.AsyncDeliverTasks.execute(AsyncDeliverTasks.java:105)[223:org.apache.felix.eventadmin:1.3.2]
        at org.apache.felix.eventadmin.impl.handler.EventAdminImpl.postEvent(EventAdminImpl.java:100)[223:org.apache.felix.eventadmin:1.3.2]
        at org.apache.felix.eventadmin.impl.adapter.LogEventAdapter$1.logged(LogEventAdapter.java:281)[223:org.apache.felix.eventadmin:1.3.2]
        at org.ops4j.pax.logging.service.internal.LogReaderServiceImpl.fire(LogReaderServiceImpl.java:134)[8:org.ops4j.pax.logging.pax-logging-service:1.7.2]
        at org.ops4j.pax.logging.service.internal.LogReaderServiceImpl.fireEvent(LogReaderServiceImpl.java:126)[8:org.ops4j.pax.logging.pax-logging-service:1.7.2]
        at org.ops4j.pax.logging.service.internal.PaxLog
T
<route id="sftp-processor1" xmlns="http://camel.apache.org/schema/spring">
    <description lang="en">sftp-processor1</description>
    <from uri="sftp://xxx@xxx:xxx/testFolder/ToClient/?password=xxx&stepwise=false&delete=true&scheduler=spring&amp;scheduler.cron=0/15+*+*+?+*+MON-SAT&antInclude=*TestFile*"/>
    <split id="split36">
        <expressionDefinition>body</expressionDefinition>
        <setHeader headerName="CamelFileName" id="setHeader346">
            <simple>${file:name.noext}_${date:now:yyyyMMdd-hhmmss.SSS}.${file:name.ext}</simple>
        </setHeader>
        <to uri="file:/home/test/inbound/?readLock=changed"/>
    </split>
</route>