2

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

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

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

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

4

2 回答 2

3

noop=true您可以在 ftp 端点上设置该选项。然后文件将被单独留下。

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

由于 ftp 组件扩展了文件组件,请参见以下网址的详细信息:http ://camel.apache.org/file2

于 2013-06-15T07:23:58.977 回答
1

你有几个选项可以做到这一点:

  1. 您根本不使用该delete=true选项并自行处理“成功”场景中的文件删除。这将是相对透明的。
  2. 如果您输入 DLC,您可以操作您正在消费的端点。因此,只需为 DLC 中的 DLC 定义您自己的处理器onPrepareFailure。请参阅示例:deadLetterChannel("jms:dlc").onPrepareFailure(new ErrorProcessor()) 之后,您可以使用该getContext()方法获取骆驼上下文以及getEndpoint()获取消费者端点的方法之一。当您拥有端点时,您可以看到使用了哪个“流程工厂”类,getProcessStrategy并且您可以在那里更新delete标志以避免删除您的文件。对于此端点,也可以使用方法定义您自己的“processStrategy”类setProcessStrategy。请自行查看在您的案例中使用了哪个流程策略类。然后,您可以覆盖相应的删除方法deleteLocalWorkFile,就像什么都不做。
于 2017-11-07T21:13:05.500 回答