The Aggregate mediator implements the Aggregator enterprise integration pattern. It
combines (aggregates) the response messages of messages that were split by the split by the Clone or
Iterate mediator. Note that the responses are not necessarily aggregated in the same order that the requests were sent,
even if you set the
sequential attribute to
true on the Iterate mediator.
The Aggregate mediator is a content-aware mediator.
<aggregate> <correlateOn expression="xpath | json-eval(JSON-Path)"/>? <completeCondition [timeout="time-in-seconds"]> <messageCount min="int-min" max="int-max"/>? </completeCondition>? <onComplete expression="xpath | json-eval(JSON-Path)" [sequence="sequence-ref"]> (mediator +)? </onComplete> </aggregate>
The parameters available for configuring the Aggregate mediator are as follows.
|Aggregate ID||This optional attribute can be used to aggregate only responses for split messages that are created by a specific clone/iterate mediator. Aggregate ID should be the same as the ID of the corresponding clone/iterate mediator that creates split messages. This is particularly useful when aggregating responses for messages that are created using nested clone/iterate mediators.|
|Aggregation Expression||An XPath expression specifying which elements should be aggregated. A set of messages that are selected for aggregation is determined by the value specified in the Correlation Expression field.|
|Completion Timeout||The number of seconds taken by the Aggregate mediator to wait for messages. When this time duration elapses, the aggregation will be completed. If the number of response messages reaches the number specified in the Completion Max-messages field, the aggregation will be completed even if the time duration specified for the Completion Timeout field has not elapsed.|
|Completion Max-messages||Maximum number of messages that can exist in an aggregation. When the number of response messages received reaches this number, the aggregation will be completed.|
|Completion Min-messages||Minimum number of messages required for the aggregation to complete. When the time duration entered in the Completion Timeout field is elapsed, the aggregation will be completed even if the number of minimum response messages specified has not been received. If no value is entered in the Completion Timeout field, the aggregation will not be completed until the number of response messages entered in the Completion Min-messages field is received.|
This is an XPath expression which provides the basis on which response messages should be selected for aggregation. This is done by specifying a set of elements for which the messages selected should have matching values. A specific aggregation condition is set via the Aggregation Expression field.
You can click NameSpaces to add namespaces if you are providing an expression. Then the Namespace Editor panel would appear where you can provide any number of namespace prefixes and URLs used in the XPath expression.
If a correlation expression is included, all the data is aggregated and filtered by the correlation expression, regardless of the request which the data originates from, and once the completion condition is achieved the specified action is performed on the aggregated data.
|Enclosing Element Property||This parameter is used to accumulate the aggregated messages inside a single property. The name of the relevant property is entered in this field.|
The sequence to run when the aggregation is complete. You can select one of the following options:
Example 1 - Sending aggregated messages through the send mediator¶
<outSequence> <aggregate> <onComplete expression="//m0:getQuoteResponse" xmlns:m0="http://services.samples"> <send/> </onComplete> </aggregate> </outSequence>
In this example, the mediator aggregates the responses coming into the Micro Integrator, and on completion it sends the aggregated message through the Send mediator.
Example 2 - Sending aggregated messages with the enclosing element¶
The following example shows how to configure the Aggregate mediator to annotate the responses sent from multiple backends before forwarding them to the client.
<outSequence> <property name="info" scope="default"> <ns:Information xmlns:ns="www.asankatechtalks.com" /> </property> <aggregate id="sa"> <completeCondition /> <onComplete expression="$body/*" enclosingElementProperty="info"> <send /> </onComplete> </aggregate> </outSequence>
The above configuration includes the following:
||This creates the property named
||The ID of the corresponding Clone mediator that splits the messages to be aggregated by the Aggregate mediator.|
||This expression is used to add the
||This is the Send mediator added as a child mediator to the Aggregate mediator in order to send the aggregated and annotated messages back to the client once the aggregation is complete.|