首页 > 解决方案 > 骆驼 | 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文件用新数据更新,也没有任何东西添加到队列中。如何将文件中的更新数据路由到我的队列?我需要执行什么来请求数据或观察更改?

(以及如何使用骆驼删除文件中的数据,而不是文件本身?)

谢谢你的任何解释。

标签: javaroutesapache-camel

解决方案


Camel File Component,参数的描述noop

如果为 true,则不会以任何方式移动或删除文件。此选项适用于只读数据或 ETL 类型要求。如果 noop=true,Camel 也会设置 idempotent=true,以避免重复使用相同的文件

实际上,您的路线是每 500 毫秒扫描一次文件夹(延迟的默认值)并查找名称为orders.txt. 但是默认idempotent设置(由 开启noop)阻止您获取“相同”文件。

为了实现您的目标,您需要调整参数idempotentKey以告诉 Camel 如何确定文件是否正在处理(默认设置为文件路径)。例如同时使用文件名和大小idempotentKey=${file:name}-${file:size}


推荐阅读