You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by smozely <st...@gmail.com> on 2011/05/09 07:31:23 UTC

Aggregator ignore messages after timeout

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.

Re: Aggregator ignore messages after timeout

Posted by smozely <st...@gmail.com>.
Ah perfect, still new to this and hadn't grasped how powerful the exception
handling is.

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

Re: Aggregator ignore messages after timeout

Posted by Claus Ibsen <cl...@gmail.com>.
You can add an onException that catches and handles the
ClosedCorrelationKeyException.


On Mon, May 9, 2011 at 7:31 AM, smozely <st...@gmail.com> wrote:
> 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.
>



-- 
Claus Ibsen
-----------------
FuseSource
Email: cibsen@fusesource.com
Web: http://fusesource.com
CamelOne 2011: http://fusesource.com/camelone2011/
Twitter: davsclaus
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/