...
The Composed Message Processor from the EIP patterns allows you to process a composite message by splitting it up, routing the sub-messages to appropriate destinations and the re-aggregating the responses back into a single message.
Available in Camel 1.5.
In Camel we provide two solutions
- using both a Splitter and Aggregator EIPs
- using only a Splitter
The difference is when using only a Splitter it aggregates back all the splitted messages into the same aggregation group, eg like a fork/join pattern.
Whereas using the Aggregator allows you group into multiple groups, a pattern which provides more options.
Tip |
---|
Using the splitter alone is often easier and possibly a better solution. So take a look at this first, before involving the aggregator. |
Example using both Splitter and Aggregator
...
In this example we want to check that a multipart order can be filled. Each part of the order requires a check at a different inventory.
...
Code Block |
---|
<route> <from uri="direct:start"/> <split> <simple>body</simple> <choice> <when> <method <simple>${bean:orderItemHelper.isWidget}</simple>="orderItemHelper" method="isWidget"/> <to uri="bean:widgetInventory"/> </when> <otherwise> <to uri="bean:gadgetInventory"/> </otherwise> </choice> <to uri="seda:aggregate"/> </split> </route> <route> <from uri="seda:aggregate"/> <aggregate strategyRef="myOrderAggregatorStrategy" completionTimeout="1000"> <correlationExpression> <simple>header.orderId</simple> </correlationExpression> <to uri="mock:result"/> </aggregate> </route> |
...
camel-core/src/test/java/org/apache/camel/processor/ComposedMessageProcessorTest.java
Example using only Splitter
In this example we want to split an incoming order using the Splitter eip, transform each order line, and then combine the order lines into a new order message.
Wiki Markup |
---|
{snippet:id=e1|lang=java|url=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitAggregateInOutTest.java} |
Tip | ||
---|---|---|
| ||
If you use XML, then the <split> tag offers the strategyRef attribute to refer to your custom |
The bean with the methods to transform the order line and process the order as well:
Wiki Markup |
---|
{snippet:id=e2|lang=java|url=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitAggregateInOutTest.java} |
And the AggregationStrategy
we use with the Splitter eip to combine the orders back again (eg fork/join):
Wiki Markup |
---|
{snippet:id=e3|lang=java|url=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitAggregateInOutTest.java} |
Include Page | |||
---|---|---|---|
Include Page | |||
|