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 <[email protected]> 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."