Apache Camel中pollEnrich如何一次性消费所有文件?
在Apache Camel中让pollEnrich一次性消费所有文件的方法
是否存在某种方式或属性可让pollEnrich一次性消费所有文件?我无法使用from,因为路由中已使用timer,单路由不允许配置两个from。我的代码如下:
from("timer://foo") .pollEnrich("file:src") .aggregate(new ZipAggregationStrategy()).constant(false) .completionFromBatchConsumer().eagerCheckCompletion() .setHeader(Exchange.FILE_NAME, simple("file"+".zip")) .to("file:src/test/java/out");
我希望将src目录下的所有文件压缩到指定文件夹,但pollEnrich当前是逐个消费文件,这引发了问题。
解决方法
- 给
pollEnrich的文件端点添加maxMessagesPerPoll=-1参数,该参数表示每次轮询消费目录下的所有文件(默认值为1,即每次只消费一个)。修改后的pollEnrich配置如下:.pollEnrich("file:src?maxMessagesPerPoll=-1") - 配合原有的
completionFromBatchConsumer()配置,聚合器会一次性处理pollEnrich拉取的所有文件,完成批量压缩的需求。 - 完整调整后的路由代码:
from("timer://foo") .pollEnrich("file:src?maxMessagesPerPoll=-1") .aggregate(new ZipAggregationStrategy()).constant(false) .completionFromBatchConsumer().eagerCheckCompletion() .setHeader(Exchange.FILE_NAME, simple("file.zip")) .to("file:src/test/java/out");
内容的提问来源于stack exchange,提问作者Mahendranath
相关产品推荐
相关产品推荐

