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



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

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

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

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

可以设置ftp端点的选项noop=true。然后该文件将被保留。

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

ftp组件扩展了file组件,详见:http://camel.apache.org/file2

您有几个选项可以这样做:

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

最新更新