[ 
https://issues.apache.org/jira/browse/CAMEL-4118?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13065063#comment-13065063
 ] 

Claus Ibsen commented on CAMEL-4118:
------------------------------------

There are 2 patches in one ;)

1)
In AggregationDefinition, you should use isForceCompletionOnStop when setting 
the value, just like the others.

2)
I wonder when aggregating an Exchange having AGGREGATION_COMPLETE_ALL_GROUPS as 
true, why should you not also aggregate that message, as it may contain data.

3)
In forceCompletionOfAllGroups you check if CamelContext is running. The log 
message is wrong. And it should be a WARN instead indicating it cannot force 
completion of all groups.

4)
There is a problem with the force completion on stop option. As when stopping, 
you do not wait for all the exchanges to complete, before you continue and 
shutdown the thread pools etc. So this logic is more complicated. 

I suggest to at first implement this ticket. And then later revisit the logic 
needed to safely flash on stopping the aggregator. The logic to do that is more 
complicated.

> Improve the Aggregator to be able to force a flush all aggregated exchanges
> ---------------------------------------------------------------------------
>
>                 Key: CAMEL-4118
>                 URL: https://issues.apache.org/jira/browse/CAMEL-4118
>             Project: Camel
>          Issue Type: Improvement
>    Affects Versions: 2.7.2
>            Reporter: Christian Müller
>            Assignee: Ben O'Day
>             Fix For: 2.9.0
>
>         Attachments: CAMEL-4097-4118.patch
>
>
> Imagine you process a big file with multiple financial transactions. After 
> splitting the file into its individual transactions, we send they to an 
> aggregator to group transactions for the same card/account together. At this 
> time, we don't know how many transactions we have to group together. Only at 
> the end of processing the input file, we know that we are done. At this time, 
> we have to instruct the aggregator to "flush all aggregated exchanges".
> A workaround for the time being is, to inject the aggregator also into a bean 
> which is called after the splitter. This bean can query for all keys with the 
> "getKeys" method and than send a "flush" exchange to the aggregator 
> (completionPredicate(header("flush"))). However it will still aggregate that 
> "flush exchange". So take care of that in your custom aggregation strategy 
> and enable eagerCheckCompletion, so the predicate is checked before 
> aggregating.
> We had a similar question on the user list to "flush all aggregated 
> exchanges" when Camel shut down.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira


Reply via email to