---
schema_version: "1"
id: 11b4520776d078d341ad2438b1bc7563d5556a84cdd6f1f83c4277d20f6d7c06
title: Configure Size-Based Aggregator Timeout and Max Size Fields
collection: mulesoft
version: current
locale: en-us
portal_url: https://docs.salesforce.com/mulesoft/current/en-us/aggregators-module/latest/aggregators-size-timeout.md
canonical_url: https://docs.mulesoft.com/aggregators-module/latest/aggregators-size-timeout
source_site: docs.mulesoft.com
content_type: documentation
content_hash: 431abd5947482fbe1cc01e16f144d53a6a417618b44c70d33ba67c33568bf04d
description: MuleSoft Documentation Site
release: "1.1"
latest: true
---
---
product: Aggregators Module
version: 1.1
is-latest-version: true
---

# Configure Size-Based Aggregator Timeout and Max Size Fields

> For the full documentation index, see: https://docs.mulesoft.com/llms.txt

To understand the Aggregators module **Size based aggregator** scope timeout behavior, review the
following diagram that explains how the **Timeout** and **Max size** fields work. Then learn how to
configure these fields in Anypoint Studio and in the XML editor in a Mule application example.

![aggregator size timeout diagram](/mulesoft/current/en-us/aggregators-module/latest/_images/aggregator-size-timeout-diagram.png)

Figure 1. Size-Based Aggregator Timeout and Max Size behavior diagram

- The **Max size** field indicates the total number of elements to be aggregated before considering
  the aggregation complete.

- The **Timeout** field indicates the maximum time to wait for the aggregation to complete.

- The first process indicates that the aggregation is complete because the total aggregated elements
  reached the number required before the timeout occurred.

- The second process indicates that the aggregation is not complete because the total aggregated
  elements did not reach the number required before the timeout occurred, which causes an
  aggregation reset.

- The third process indicates that you can use an **Aggregator listener** source to capture the
  elements that were aggregated before the timeout occurred. The source triggers when the timeout
  occurs.

If you choose to use an **Aggregator listener** source to capture incomplete aggregation elements,
you must select the **Include timed out group** field to indicate that the source is triggered when
the timeout occurs.

## Configure the Mule Application

The following example shows how to configure the **Size based Aggregator** scope to aggregate up to
`3` HTTP request calls within `10` seconds. The application uses DataWeave to set the payload of
each call with a random ID number. When the aggregation reaches the `3` calls required for
completion and before the timeout occurs, the application logs all the aggregated elements.
Otherwise, the application logs only the aggregated elements captured by an **Aggregator listener**
source when the timeout occurred.

![Size-Based Aggregator Flow Example in Anypoint Studio Canvas](/mulesoft/current/en-us/aggregators-module/latest/_images/aggregator-size-timeout-example.png)

Figure 2. Size-Based Aggregator Flow Example

To test this example in your own environment, you must create the Mule application and test it with
curl commands.

To create the Mule flow in Anypoint Studio:

1.  In **Mule Palette**, select **HTTP Listener** and drag it onto the canvas.  
    The source initiates the flow by listening for incoming HTTP message attributes.

2.  In **Connector configuration**, select **HTTP\_Listener\_config**.

3.  Set **Path** to `/test`.

4.  Drag a **Transform message** component to the right of **Listener**.

5.  In the DataSense preview window of the **Transform message** component, add the following
    DataWeave expression, which sets to each HTTP request payload a `Source Name` as `"size-based"`
    and a `Source ID` as `random() as String`:

    ```DataWeave
    %dw 2.0
    output application/json
    ---
    {
        "Source Name": "size-based",
        "Source ID": (random() as String)
    }
    ```

6.  Drag the **Size based aggregator** scope to the right of **Transform message**.

7.  Set **Name** to `sizeBasedAggregator`.

8.  Set **Max size** to `3`.

9.  Set **Timeout** to `10`.

10. Set **Content** to `payload`, which is the expression that defines what to aggregate: in this
    case, the transformed HTTP requests.

11. Drag a **Logger** component into the **Incremental aggregation** route.

12. In the **Logger** configuration screen, set **Message** to `Doing incremental aggregation step.`

13. Drag a **Logger** component into the **Aggregation complete** route.

14. Set **Message** to `Aggregation complete`.

15. Drag another **Logger** component to the right of the first **Logger** component in
    **Aggregation complete**.

16. Set **Message** to the following expression, which returns all the aggregated elements:

    ```xml
    output application/json
    ---
    payload
    ```

17. Drag an **Aggregator listener** source below the first flow.

18. Set **Aggregator name** to `sizeBasedAggregator`, which listens to the previous aggregator.

19. Select **Include timed out groups**, which indicates whether the listener should be triggered
    when the timeout occurs.

20. Drag a **Logger** component to the right of the **Aggregation listener** source.

21. Set **Message** to the following expression, which returns only the aggregated elements before
    the timeout occurs:

    ```xml
    output application/json
    ---
    payload
    ```

22. Save the project.

23. In **Package Explorer**, click **Run > Run As > Mule Application**.

24. Test the app by sending the following curl command within 10 seconds:  
    `curl -X POST [http://localhost:8086/test](http://localhost:8086/test)`

25. Navigate to the **Console** view to read the logger message:

```none
INFO  2021-06-22 12:59:16,319 [[MuleRuntime].uber.12: [aggregator-size-demo].aggregator-size-demoFlow.CPU_INTENSIVE @7992f689] [processor: aggregator-size-demoFlow/processors/1/route/0/processors/0; event: cbc219c0-d372-11eb-b975-f01898ad2638] org.mule.runtime.core.internal.processor.LoggerMessageProcessor: Doing incremental aggregation step.
INFO  2021-06-22 12:59:26,328 [[MuleRuntime].uber.12: [aggregator-size-demo].aggregator-size-demoFlow1.CPU_LITE @684a1bef] [processor: aggregator-size-demoFlow1/processors/0; event: d6b48f00-d36f-11eb-b975-f01898ad2638] org.mule.runtime.core.internal.processor.LoggerMessageProcessor: [
  {
    "Source Name": "size-based",
    "Source ID": "0.6568747259174192"
  }
]
```

This example logger message shows that for the first HTTP request, the **Logger** component in the
**Incremental aggregator** route logs the message `Doing incremental aggregation step.` After the
aggregation reaches the `10` seconds, the timeout occurs. The **Aggregation listener** source
captures the only HTTP request call and the subsequent **Logger** component returns the aggregated
payload element, which is the random ID number.

## XML for Size-Based Aggregator Timeout Max Size Example

Paste this code into your Studio XML editor to quickly load the flow for this example into your Mule
app:

```xml
<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:db="http://www.mulesoft.org/schema/mule/db" xmlns:aggregators="http://www.mulesoft.org/schema/mule/aggregators"
	xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
	xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd
http://www.mulesoft.org/schema/mule/aggregators http://www.mulesoft.org/schema/mule/aggregators/current/mule-aggregators.xsd
http://www.mulesoft.org/schema/mule/db http://www.mulesoft.org/schema/mule/db/current/mule-db.xsd">
	<http:listener-config name="HTTP_Listener_config">
		<http:listener-connection host="0.0.0.0" port="8086" />
	</http:listener-config>
	<flow name="aggregator-size-demoFlow"  >
		<http:listener doc:name="Listener"  config-ref="HTTP_Listener_config" path="/test" allowedMethods="POST"/>
		<ee:transform doc:name="Transform Message" >
			<ee:message >
				<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
{
    "Source Name": "size-based",
    "Source ID": (random() as String)
}]]></ee:set-payload>
			</ee:message>
		</ee:transform>
		<aggregators:size-based-aggregator doc:name="Size based aggregator"  name="sizeBasedAggregator" maxSize="3" timeout="10">
			<aggregators:incremental-aggregation>
				<logger level="INFO"  message="Doing incremental aggregation step." />
			</aggregators:incremental-aggregation>
			<aggregators:aggregation-complete>
				<logger level="INFO"  message="Aggregation complete" />
				<logger level="INFO" message="#[output application/json
---
payload]" />
			</aggregators:aggregation-complete>
		</aggregators:size-based-aggregator>
	</flow>
	<flow name="aggregator-size-demoFlow1"  >
		<aggregators:aggregator-listener  aggregatorName="sizeBasedAggregator" includeTimedOutGroups="true"/>
		<logger level="INFO" message="#[output application/json&#10;---&#10;payload]"/>
	</flow>
</mule>
```

## See Also

- [Aggregators Module Examples](https://docs.mulesoft.com/aggregators-module/latest/aggregators-examples)

- [Salesforce Help](https://help.salesforce.com)
