Apache Camel SFTP 消费者在阅读后不删除文件

Apache Camel SFTP Consumer not deleting file after reading

我发现 Apache Camel SFTP 有一个奇怪的行为。即使设置了 delete=true 属性,它也不会在接收后删除文件。我正在使用 3.0.0-M3 版本的 camel-ftp

以下是我的 SFTP 配置,

sftp://<<HOST_NAME>>:<<PORT>>/<<PATH>>?username=<<USERNAME>>" +
                    "&password=<<PASSWORD>>" +
                    "&preferredAuthentications=password" +
                    "&readLock=changed" +
                    "&readLockMinAge=30000" +
                    "&delay=20000" +
                    "&delete=true";

现在Camel可以读取文件了,但是读取后并没有删除文件。在浏览文档时,它说

delete (consumer) - If true, the file will be deleted after it is processed successfully.

收到文件后,我所做的就是将其传递到另一条路线,如下所示,

from(endpointUri).to("direct:procesSftpFile");

我应该将它从 direct 更改为 vm 还是 seda

看起来没有人遇到过这个问题,我不知何故弄清楚了它是从哪里开始发生的。

问题不是因为 Camel sftp 组件,而是我调用的那段代码。

我流程的第二部分如下所示,

from("direct:procesSftpFile")
.log("...")
// logging and other regular processing
....
// sending to vm InOnly 
.to("vm:queue1?exchangePattern=InOnly")
.. some more processing..
.to("vm:queue2?exchangePattern=InOnly")

所以问题在于在上面的代码片段中调用那些 queue1 和 queue2。

评论它们,修复它,sftp 开始删除文件。为了调用 VM,我使用 producerTemplate.asyncSend 而不是 to() 作为解决方法。

我仍然感到困惑的一件事是,如果我们使用 InOnly 交换模式,那么为什么它会影响 sftp 行为?也许我应该在一个单独的问题中问这个问题。