java - 骆驼 | RouteBuilder 何时在更新的文件上执行?
问题描述
我设置了一个基本路线:
RouteBuilder route = new RouteBuilder() {
@Override
public void configure() throws Exception {
from("file:OrderSystem?fileName=orders.txt&noop=true")
.split(body().tokenize("\n"))
.process(OrderFactory)
.to("jms:queue:inqueue");
}
};
当我ctxt.start()
使用添加的路由运行时,文件中的数据立即在我的 ActiveMQ 队列中。之后我有一个Thread.sleep(999999)
,以确保骆驼保持活力,但即使我的orders.txt
文件用新数据更新,也没有任何东西添加到队列中。如何将文件中的更新数据路由到我的队列?我需要执行什么来请求数据或观察更改?
(以及如何使用骆驼删除文件中的数据,而不是文件本身?)
谢谢你的任何解释。
解决方案
从Camel File Component,参数的描述noop
是
如果为 true,则不会以任何方式移动或删除文件。此选项适用于只读数据或 ETL 类型要求。如果 noop=true,Camel 也会设置 idempotent=true,以避免重复使用相同的文件。
实际上,您的路线是每 500 毫秒扫描一次文件夹(延迟的默认值)并查找名称为orders.txt
. 但是默认idempotent
设置(由 开启noop
)阻止您获取“相同”文件。
为了实现您的目标,您需要调整参数idempotentKey
以告诉 Camel 如何确定文件是否正在处理(默认设置为文件路径)。例如同时使用文件名和大小idempotentKey=${file:name}-${file:size}
推荐阅读
- java - 回复 kafka 模板连接标头(CorrelationId)未发送到 Google pub sub
- r - 如何使用 ggplot2 R 在同一级别制作时间序列线和直方图?
- python - 在熊猫数据框中拆分一列不删除 na
- javascript - 在 iOS 上调用“fetch”时出现 Javascript“TypeError:cancelled”错误
- ruby-on-rails - Adding font awesome icon dynamically causes page to scroll to top
- c - 为什么 printf("%s\n", "123456789" + 3); //输出:“456789”
- c++ - QT,我做了无模式对话框,现在我想通过单击一个按钮来关闭所有对话框
- html - Windows 10 - HTTP 错误 500.19 - 内部服务器错误
- python - python中的“上面定义的重新声明的变量没有使用”?
- image-processing - 带有填充的平均池的期望行为是什么?