Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

A common use case in Camel is to consume messages from a queue and aggregate them before sending the aggregated state to another endpoint. In order to ensure that data is not lost if the system performing the processing fails, it is typically consumed within a transaction from the queue, and once aggregated stored in a persistent AggregationRepository, such as the one found in Camel the JDBC Component.

The behavior of the aggregator pattern involves fetching data from the AggregationRepository before an incoming message is aggregated, and writing back the result afterwards. By nature, the reads and writes take progressively longer as the number of aggregated artifacts increases. A rough example of this using arbitrary time units that demonstrates the impact of this is as follows:

...

In contrast, consumption performance using the SJMS Batch component is linear. Each message is consumed and aggregated using an AggregationStrategy before the next one is fetched. As all of the consumption an and aggregation is performed in a single JMS transaction , no external storage is required to persist the intermediate state , and - this avoids the read and write costs described above. In practice, this yields multiple orders of magnitude higher throughput.

...