On Wed, Aug 5, 2009 at 12:04 PM, lauri.siltanen<[email protected]> wrote:
>
> Hi, Claus
>
> Yes, unfortunately, aggregation is required for handling the messages. But I
> was able to make it work using the .end() approach. Since that may look
> confusing to everyone else, I'll give the direct enpoint a go.
>
> I did actually have a "dummy" endpoint in use, much like the direct endpoint
> you're suggesting, but it was my own endpoint and it seemed a bit clumsy. I
> wasn't aware of the direct endpoint at the time. It looks a lot less like a
> kludge :)
>
> Thanks a lot for the quick answer!
Glad you got it working.
Yeah I like to divide my routes into smaller pieces and like them using direct.
Then its also easier to test the different routes individually and
later the "big picture".
I guess if we had an alias for direct, like "link" or "link-route" or
something then it would be more obvious to use it?
>
> Lauri
>
>
>
> Claus Ibsen-2 wrote:
>>
>> Hi
>>
>> Are you sure you want to use an aggregator?
>> When reading it is sounds like you want to do
>>
>> from A -> B -> choice when (X) -> C
>>
>> from(EndpointA)
>> .to(EndpointB)
>> .choice()
>> .when(aggregationPredicate).to(EndpointC)
>> .end();
>>
>>
>> You can use the "direct" endpoint to link routes together so if you
>> have trouble with having aggregator nested
>> then just route to a "direct:foo" endpoint and then do a
>>
>> from("direct:foo").aggreagate...
>>
>> You can also try adding a .end() in your route to help Camel denote
>> the end of the when / choice / aggregate blocks.
>>
>>
>> On Wed, Aug 5, 2009 at 9:27 AM, lauri.siltanen<[email protected]>
>> wrote:
>>>
>>> I have a bunch of messages that need to be routed from EndpointA to
>>> EndpointB, always. In addition, sometimes these messages need to be
>>> aggregated to EndpointC. So always to B, sometimes to C.
>>>
>>> I have tries to achieve this by the following DSL definition:
>>>
>>> from(EndpointA).choice()
>>> .when(aggregationPredicate)
>>> .aggregate(myAggregationCollection).to(EndpointC)
>>> .when(endpointBPredicate)
>>> .to(EndpointB)
>>> .otherwise()
>>> .to(deadLetters);
>>>
>>> This does not work due to the fact that to(EndpointC) is of type
>>> AggregationDefinition instead of ChoiceDefinition and therefore cannot be
>>> followed by .when(endpointBPredicate).
>>>
>>>
>>>
>>> The other definition I tried was the following:
>>>
>>> from(EndpointA).choice()
>>> .when(aggregationPredicate)
>>> .aggregate(myAggregationCollection).to(EndpointC);
>>>
>>> from(EndpointA).choice()
>>> .when(endpointBPredicate)
>>> .to(EndpointB)
>>> .otherwise()
>>> .to(deadLetters);
>>>
>>> What happens here is that every other time the messages go to the first
>>> from(EndpointA).choice() and every other time they go to the second
>>> from(EndpointA).choice(). I would like them to go to both.
>>>
>>> How do I go about getting the messages to both endpoints when the
>>> predicates
>>> return true?
>>>
>>> Thanks,
>>> Lauri
>>> --
>>> View this message in context:
>>> http://www.nabble.com/Route-definition-with-aggregation-tp24822021p24822021.html
>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>
>>>
>>
>>
>>
>> --
>> Claus Ibsen
>> Apache Camel Committer
>>
>> Open Source Integration: http://fusesource.com
>> Blog: http://davsclaus.blogspot.com/
>> Twitter: http://twitter.com/davsclaus
>>
>>
>
> --
> View this message in context:
> http://www.nabble.com/Route-definition-with-aggregation-tp24822021p24824055.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>
>
--
Claus Ibsen
Apache Camel Committer
Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/
Twitter: http://twitter.com/davsclaus