Hi there,

We are attempting to implement an aggregator to implement rules around
preferring messages from one source over another with a timeout.

We have two message sources A and B which are implemented over two physical
networks, and the quality of source A is better than B.

So we have these basic rules ... 
* If a message arrives from source A just use it
* If a message arrives from source B, wait 2 minutes and if no message has
arrived from A use it

And this can be implemented reasonably easily, I have a AggregationStrategy
that prefers messages that were routed via A over messages routed via B. and
an completionPredicate that will let messages through if they arrived from A
.... and a completionTimeout to allow messages from B to be used if no A
message has arrived in 2 minutes.

I find myself in a tricky situation when a message from A arrives after the
message from B has already been forwarded on.

It seems that a late arriving A message will be treated as a new
aggregate... and so just get sent on as a new message.

If I use closeCorrelationKeyOnCompletion then I get the aggregate closed
exception and my message from A does not get processed correctly.

I was wondering if this is a case I should be able to handle easily,
something like closeCorrelationKeyOnCompletion just ignoring the messages if
the key has already been closed.

Or putting a idempotentConsumer as the next step in the chain keyed on the
same thing? ... this seems to work, just wanting to check what other people
think.

Cheers,
Steve





--
View this message in context: 
http://camel.465427.n5.nabble.com/Aggregator-ignore-messages-after-timeout-tp4381124p4381124.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to