首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Camel文件使用者-处理后保留文件,但接受同名文件

Camel文件使用者-处理后保留文件,但接受同名文件
EN

Stack Overflow用户
提问于 2019-07-12 08:01:11
回答 1查看 574关注 0票数 1

情况就是这样:

我有一个工作流,它在文件夹中等待文件,对它们进行处理,然后将它们发送到另一个系统。

由于不同的原因,我们在工作流中的“子进程”之间使用ActiveMQ代理,在最后一步发送消息之前,每个路由都会以某种方式更改消息。除第一条和最后一条路由外,每个“子进程”只读写ActiveMQ。

它也是工作流的一部分,在发送消息之后有一条路由,它处理初始文件、移动或删除它。只有这个路径知道这与文件有关。

这意味着,在用户路由完成后,文件必须留在文件夹中,因为元数据只是写入ActiveMQ,但是实际的工作流还没有完成。

它使用文件使用者上的noop=true参数来工作。

这方面的问题是,在“发送路由”删除(或移动)文件之后,文件使用者在重新启动路由之前不会再次响应同名的新文件。

很明显,这是预期的、正确的行为,因为忽略以前使用过的文件是noop参数的要点,但这对我没有帮助。

现在的问题是,如何让文件使用者只处理一次文件,只要它存在于文件夹中,但只要其他进程(在本例中是另一条路径)移除该文件,就“忘记”它。

作为另一种选择,我可以让文件组件将文件移动到临时文件夹中,然后在那里进行处理,然后将合并文件夹保持为空,但这会带来新的问题,这是我想要避免的(例如,将同名的文件移动到文件夹中,只要第一个文件尚未完全处理)。

我很想听听关于如何处理那个案子的一些想法。

问候克里斯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-12 08:59:38

你需要告诉骆驼不仅要使用文件名进行幂等性检查。

在类似的情况下,如果我想获取对一个文件的更改,而该文件是未进行操作的,那么我可以选择。

代码语言:javascript
代码运行次数:0
运行
复制
idempotentKey=${file:name}-${file:modified}

在我的url中,它确保如果您更改了文件,或者创建了一个新的文件,它会将它作为一个不同的文件来处理。

一定要检查您可能正在处理的文件数量,因为幂等缓冲区在默认情况下是有限的(我认为是1000条记录),所以如果您一次可能处理超过1000个文件,那么当文件1001到达时,它可能会“忘记”它已经处理的文件1,然后再次尝试重新处理文件1。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57002658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档