我有一个从 FTP 服务器读取的路由,然后处理消息。该路由具有 DeadLetterChannel 错误处理程序,当处理消息时抛出异常时,该处理程序将消息路由到某个 bean。
现在,当错误处理程序处理异常时,Camel 假定一切正常并仍然删除 FTP 文件。
如果我删除错误处理程序,Camel 在出现异常时不会删除文件。
现在我的问题是,我怎样才能有一个 DeadLetterChannel 错误处理程序,同时在处理失败时阻止 Camel 删除 FTP 文件?
我有一个从 FTP 服务器读取的路由,然后处理消息。该路由具有 DeadLetterChannel 错误处理程序,当处理消息时抛出异常时,该处理程序将消息路由到某个 bean。
现在,当错误处理程序处理异常时,Camel 假定一切正常并仍然删除 FTP 文件。
如果我删除错误处理程序,Camel 在出现异常时不会删除文件。
现在我的问题是,我怎样才能有一个 DeadLetterChannel 错误处理程序,同时在处理失败时阻止 Camel 删除 FTP 文件?
noop=true
您可以在 ftp 端点上设置该选项。然后文件将被单独留下。
尽管您将不得不考虑将来如何跳过拾取文件?为此,您可以使用幂等存储库来跟踪您之前处理过的文件。或者另一种方法是在完成后移动文件等。
由于 ftp 组件扩展了文件组件,请参见以下网址的详细信息:http ://camel.apache.org/file2
你有几个选项可以做到这一点:
delete=true
选项并自行处理“成功”场景中的文件删除。这将是相对透明的。onPrepareFailure
。请参阅示例:deadLetterChannel("jms:dlc").onPrepareFailure(new ErrorProcessor())
之后,您可以使用该getContext()
方法获取骆驼上下文以及getEndpoint()
获取消费者端点的方法之一。当您拥有端点时,您可以看到使用了哪个“流程工厂”类,getProcessStrategy
并且您可以在那里更新delete
标志以避免删除您的文件。对于此端点,也可以使用方法定义您自己的“processStrategy”类setProcessStrategy
。请自行查看在您的案例中使用了哪个流程策略类。然后,您可以覆盖相应的删除方法deleteLocalWorkFile
,就像什么都不做。