Index Changes
This is version 5. It is not the current version, and thus it cannot be edited.
[Back to current version]   [Restore this version]

Enterprise Integration Patterns - Aggregate

Overview

The purpose of the aggregate pattern is to take a set of one or more input messages and create a single output message.

Use Cases

Aggregate can be used to satisfy a wide range of use cases depending on the message type and message flow requirements. The following use cases represent the most common categories for using aggregate.

Reassembly

Take a set of related messages and cram them into a single message. Most commonly used in conjunction with split and broadcast, where the number of messages in the input set is known.

Batching

Hold a bunch of messages and release them as a single batch message. The determination of when to release the batch message can be based on a time window, number of messages, size of messages, etc.

Enveloping

A refinement of batching, an enveloping aggregate can be used to create a group of messages with common characteristics (same type, same destination, same source, etc.). These messages are wrapped in one or more envelopes before they are forwarded as a single message.

Gating

An aggregate which can be used to make sure that messages from different flows are held until all messages arrive at the aggregate.

Selection

The aggregate can choose to only forward a subset of the aggregated messages.

IFL

Syntax

aggregate [name] | ( [wait-for] [filter] [aggregator] )
name       := named configuration with contains the aggregate details
wait-for   := wait condition that must be met before input messages are forwarded as an aggregate
filter     := filter expression used to select specific messages for the aggregate
aggregator := definition of how the aggregated messages are assembled into a single aggregate output message

Examples

Configuration

Packaging

At application build time, all aggregate configurations should be packaged as part of the application. Since the ultimate consumer of this configuration information is the runtime aggregate implementation, and not a component, it is not appropriate to package the individual configuration instances into a service unit. Rather, the following convention should be followed:
app-root /
      META-INF /
            flow/
                 aggregate/
                    [configuration]
Where '{name}' is the named configuration provided in IFL. This layout mimics the configuration layout, but includes META-INF/ and flow/ as parent directories.

All aggregate configuration should be included in this directory, including inline configuration. Since inline configuration is not named, a name must be generated. Using a pattern of 'aggregate$n' should work, where 'n > 0' and increments for each inline aggregate definition in the IFL.

Runtime

JSPWiki v2.4.100
[RSS]
« Home Index Changes Prefs
This particular version was published on 21-Aug-08 09:35 AM, -0700 by KeithBabo