23.23. 避免多次读取同一文件(幂等使用者)


Camel 直接在组件内支持 Idempotent Consumer,以便它跳过已处理的文件。这个功能可以通过设置 idempotent=true 选项来启用。

from("file://inbox?idempotent=true").to("...");
Copy to Clipboard Toggle word wrap

Camel 使用绝对文件名作为幂等密钥来检测重复的文件。您可以使用 idempotentKey 选项中的表达式自定义此密钥。例如,使用名称和文件大小作为密钥

<route>
  <from uri="file://inbox?idempotent=true&amp;idempotentKey=${file:name}-${file:size}"/>
  <to uri="bean:processInbox"/>
</route>
Copy to Clipboard Toggle word wrap

默认情况下,Camel 使用基于内存的存储来跟踪消耗的文件,它使用了最接近 1000 条目的最近使用缓存。您可以使用值中的 # 号来 插入 此存储自己的实施,以指示它在带有指定 id 的 Registry 中引用 bean。

 <!-- define our store as a plain spring bean -->
 <bean id="myStore" class="com.mycompany.MyIdempotentStore"/>

<route>
  <from uri="file://inbox?idempotent=true&amp;idempotentRepository=#myStore"/>
  <to uri="bean:processInbox"/>
</route>
Copy to Clipboard Toggle word wrap

如果因为之前已消耗了文件,Camel 会记录 DEBUG 级别的日志:

DEBUG FileConsumer is idempotent and the file has been consumed before. Will skip this file: target\idempotent\report.txt
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat