如何使用 Apache Camel 仅从文件夹中轮询最后修改的文件?
How to poll only the last modified file from folder using Apache Camel?
在我基于 Spring 的应用程序中,我想使用 Camel 轮询文件夹并仅获取最近修改日期(最近的一个)的文件。文件夹中的文件应该不会被骆驼删除。
我尝试使用下一个选项开始路线:
from("file:C:/test?noop=true&sortBy=reverse:file:modified&eagerMaxMessagesPerPoll=false&maxMessagesPerPoll=1)
.routeId("MainRoute")
.bean(FileProcessor.class);
}
使用这样的配置,Camel 获取最近的文件,对其进行处理,然后开始处理下一个文件。
但在我的场景中,它应该只使用最后一个文件:如果没有添加任何文件,它每次都必须使用相同的文件。如果要删除最近的文件,则必须找到另一个最近的文件。
在Camel中如何实现?
构建您自己的具有此逻辑的文件过滤器 实现,您在其中保持每个文件夹的状态,这是您在那里接受的最后一个文件。然后过滤器可以 return true 或 false 是否拾取文件。
在该逻辑中,您可以使用 Java 文件 API 列出所有文件,以查找是否有另一个具有较新时间戳的文件等。
终于找到了一个简单的解决方案。根据文档:
If noop=true, Camel will set idempotent=true as well, to avoid consuming the same files over and over again.
因此,为了实现所需的行为,我们必须将 idempotent
参数设置回 false
。使用这样的设置,Camel 将不会从检查中排除任何文件:
from("file:C:/test?noop=true&idempotent=false&sortBy=reverse:file:modified&eagerMaxMessagesPerPoll=false&maxMessagesPerPoll=1)
.routeId("MainRoute")
.bean(FileProcessor.class);
}
在我基于 Spring 的应用程序中,我想使用 Camel 轮询文件夹并仅获取最近修改日期(最近的一个)的文件。文件夹中的文件应该不会被骆驼删除。
我尝试使用下一个选项开始路线:
from("file:C:/test?noop=true&sortBy=reverse:file:modified&eagerMaxMessagesPerPoll=false&maxMessagesPerPoll=1)
.routeId("MainRoute")
.bean(FileProcessor.class);
}
使用这样的配置,Camel 获取最近的文件,对其进行处理,然后开始处理下一个文件。
但在我的场景中,它应该只使用最后一个文件:如果没有添加任何文件,它每次都必须使用相同的文件。如果要删除最近的文件,则必须找到另一个最近的文件。
在Camel中如何实现?
构建您自己的具有此逻辑的文件过滤器 实现,您在其中保持每个文件夹的状态,这是您在那里接受的最后一个文件。然后过滤器可以 return true 或 false 是否拾取文件。
在该逻辑中,您可以使用 Java 文件 API 列出所有文件,以查找是否有另一个具有较新时间戳的文件等。
终于找到了一个简单的解决方案。根据文档:
If noop=true, Camel will set idempotent=true as well, to avoid consuming the same files over and over again.
因此,为了实现所需的行为,我们必须将 idempotent
参数设置回 false
。使用这样的设置,Camel 将不会从检查中排除任何文件:
from("file:C:/test?noop=true&idempotent=false&sortBy=reverse:file:modified&eagerMaxMessagesPerPoll=false&maxMessagesPerPoll=1)
.routeId("MainRoute")
.bean(FileProcessor.class);
}