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