Hello, Until this functionality is added you can use a content based router (choice) [0] to determine if the message is a polled file or a empty message. If you want a notification (say by email) on a empty poll I think this is a good way to solve it.
Something like this should work. ---------- from("file:files/?sendEmptyMessageWhenIdle=true&noop=true") .choice() .when(property(Exchange.BATCH_SIZE).isNull()) .to("mock:notify") .otherwise() .to("mock:aggregate"); ---------- [0] http://camel.apache.org/content-based-router.html Best regards Pontus Ullgren On Wed, Jul 11, 2012 at 3:43 AM, Gordienko, Max <max.gordie...@anz.com> wrote: > Hi all, > > I am using a file consumer in the batch mode to consume all the files in > a directory. > I aggregate them all together using aggregate(constant(true), new > MyAggregationStrategy()).completionFromBatchConsumer() > And it works just fine. > > Now I need to be notified if there is nothing to consume (the directory > is empty). So I use sendEmptyMessageWhenIdle=true > which works just fine by itself. > > But if I use both sendEmptyMessageWhenIdle and > completionFromBatchConsumer() the aggregation never completes. > > Tested with camel 2.10.0 > I found this completion logic in AggregateProcessor.isCompleted(String, > Exchange) > > int size = exchange.getProperty(Exchange.BATCH_SIZE, 0, > Integer.class); > if (size > 0 && batchConsumerCounter.intValue() >= size) { > .... > } > > In other words the aggregate will never complete if there is nothing in > the batch. > > Is there an elegant way to aggregate a flow even if the batch is empty? > > Thank you! > Max > > "This e-mail and any attachments to it (the "Communication") is, unless > otherwise stated, confidential, may contain copyright material and is for > the use only of the intended recipient. If you receive the Communication in > error, please notify the sender immediately by return e-mail, delete the > Communication and the return e-mail, and do not read, copy, retransmit or > otherwise deal with it. Any views expressed in the Communication are those of > the individual sender only, unless expressly stated to be those of Australia > and New Zealand Banking Group Limited ABN 11 005 357 522, or any of its > related entities including ANZ National Bank Limited (together "ANZ"). ANZ > does not accept liability in connection with the integrity of or errors in > the Communication, computer virus, data corruption, interference or delay > arising from or in respect of the Communication."