You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by wjmcdonald <wi...@transcentra.com> on 2012/07/05 23:04:43 UTC

Multiprocessing a single message into multiple messages

How do I process a single message with multiple dynamic list of processors
sending a new message from each processor to a filter/aggregator?

My task is to process a single message with many different processors. 
Think of the message as describing a bunch of colored shapes.  One processor
counts the number of squares, another counts the number of red objects,
another collects all those shapes with 3 or more virticies (ie. not
circles), each into a new message.  All of these processors (and I want them
to be dynamic so I can add or subtract them to the set) need to process a
single message from an endpoint.  After processing them, they route a new
message.  The content of the message may be different:
Color Counters might be...
msg1: from the redShapesCounter processor impl.
 <count counter="redShapes">5</count>
msg2: from the blueShapesCounter processor impl.
 <count counter="blueShapes">2</count>
msg3: from the purpleShapesCounter processor impl.
 <count counter="purpleShapes">3</count>

A Vertices Lists msg from the verticiesLister impl might be...
 <shape type="withVerticies">
    <square id="s1">...
    <triangle id="t1">...
 </shape>)

After processing, all of these messages are sent to a queue for that type
(eg. ShapColorCounters).

Next, a dynamic filter is used to select those messages that we want to
report on.  A PrimaryColorOfShapesCountReport processor might aggregate all
the primary color counter messages and produce a report with a total at the
bottom.  It will filter only on primary color count messages.

Design:
=====
I was going to have a bean that setup routes for each processor: 
sedaQ[i]->processor[i]->destQ[j]
The sedaQs would be fed using the RecipientList EIP from a <method> call to
a bean to create the list of sedaQs.
Then destQ[j] -> filter(listOfThingsWeAreInterestedIn) ->
aggregator(eg.PrimaryColorShapesReportGenerator) -> report.in.endpoint.

Is there a better way of doing this?  I'm thinking I'd like the processors
(eg. counters) to be in parallel/asynch too.  I'm not quite sure if there is
a better design of EIP usage...


--
View this message in context: http://camel.465427.n5.nabble.com/Multiprocessing-a-single-message-into-multiple-messages-tp5715576.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Re: Multiprocessing a single message into multiple messages

Posted by Christian Müller <ch...@gmail.com>.
Study the following EIP's:
- http://camel.apache.org/dynamic-router.html
- http://camel.apache.org/recipient-list.html

Best,
Christian

On Thu, Jul 5, 2012 at 11:04 PM, wjmcdonald <
william.mcdonald@transcentra.com> wrote:

> How do I process a single message with multiple dynamic list of processors
> sending a new message from each processor to a filter/aggregator?
>
> My task is to process a single message with many different processors.
> Think of the message as describing a bunch of colored shapes.  One
> processor
> counts the number of squares, another counts the number of red objects,
> another collects all those shapes with 3 or more virticies (ie. not
> circles), each into a new message.  All of these processors (and I want
> them
> to be dynamic so I can add or subtract them to the set) need to process a
> single message from an endpoint.  After processing them, they route a new
> message.  The content of the message may be different:
> Color Counters might be...
> msg1: from the redShapesCounter processor impl.
>  <count counter="redShapes">5</count>
> msg2: from the blueShapesCounter processor impl.
>  <count counter="blueShapes">2</count>
> msg3: from the purpleShapesCounter processor impl.
>  <count counter="purpleShapes">3</count>
>
> A Vertices Lists msg from the verticiesLister impl might be...
>  <shape type="withVerticies">
>     <square id="s1">...
>     <triangle id="t1">...
>  </shape>)
>
> After processing, all of these messages are sent to a queue for that type
> (eg. ShapColorCounters).
>
> Next, a dynamic filter is used to select those messages that we want to
> report on.  A PrimaryColorOfShapesCountReport processor might aggregate all
> the primary color counter messages and produce a report with a total at the
> bottom.  It will filter only on primary color count messages.
>
> Design:
> =====
> I was going to have a bean that setup routes for each processor:
> sedaQ[i]->processor[i]->destQ[j]
> The sedaQs would be fed using the RecipientList EIP from a <method> call to
> a bean to create the list of sedaQs.
> Then destQ[j] -> filter(listOfThingsWeAreInterestedIn) ->
> aggregator(eg.PrimaryColorShapesReportGenerator) -> report.in.endpoint.
>
> Is there a better way of doing this?  I'm thinking I'd like the processors
> (eg. counters) to be in parallel/asynch too.  I'm not quite sure if there
> is
> a better design of EIP usage...
>
>
> --
> View this message in context:
> http://camel.465427.n5.nabble.com/Multiprocessing-a-single-message-into-multiple-messages-tp5715576.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>