如何在处理失败时阻止camel删除FTP文件,并由错误处理程序处理异常

时间:2013-06-14 23:47:50

标签: apache-camel

我有一条从FTP服务器读取的路由,然后处理该消息。该路由具有DeadLetterChannel错误处理程序,该处理程序在处理消息时抛出异常时将消息路由到某个bean。

现在,当错误处理程序处理异常时,Camel假定一切正常并仍然删除了FTP文件。

如果我删除了错误处理程序,则在出现异常时Camel不会删除该文件。

现在我的问题是,我怎么能有一个DeadLetterChannel错误处理程序,同时在处理失败时阻止Camel删除FTP文件?

2 个答案:

答案 0 :(得分:1)

您可以在ftp端点上设置选项noop=true。然后该文件将保持不变。

虽然您将来必须考虑如何跳过拾取文件?为此,您可以使用幂等存储库来跟踪之前处理过的文件。或者另一种方法是在完成后移动文件等。

当ftp组件扩展文件组件时,请参阅:http://camel.apache.org/file2

中的详细信息

答案 1 :(得分:1)

您有多种选择:

  1. 您根本不使用delete=true选项,并在"成功"处理删除文件。你自己的情景。这将是相对透明的。
  2. 如果您输入DLC,您可以操纵您正在使用的端点。因此,只需在onPrepareFailure中为DLC定义自己的处理器。请参阅示例:deadLetterChannel("jms:dlc").onPrepareFailure(new ErrorProcessor()) 之后,您可以使用getContext()方法获取驼峰上下文和其中一个getEndpoint()方法来获取您的消费者端点。 当您拥有端点时,您可以看到哪个'处理工厂' class与getProcessStrategy一起使用,您可以更新delete标志以避免删除文件。 对于此端点,还可以定义您自己的流程策略'使用方法setProcessStrategy的类。请自行查看您的过程策略类。然后,您可以覆盖相应的删除方法,如deleteLocalWorkFile,并且什么都不做。