Hi list,
I'm using the following aggregation:
<route>
<from uri="seda:aggregation" />
<!-- aggregate using our strategy and leveldb repo -->
<aggregate strategyRef="rowAggregationStrategy"
aggregationRepositoryRef="aggregationRepository"
completionFromBatchConsumer="false">
<!-- correlate by header with the key id -->
<correlationExpression>
<header>aggrId</header>
</correlationExpression>
<completionPredicate>
<simple>${in.header.complId} == 'END_${exchangeId}'</simple>
</completionPredicate>
<!-- send aggregated messages to the mock endpoint -->
<to uri="seda:marshaller" />
</aggregate>
</route>
When the aggregation may be concluded I send an empty message with the
'complId' set to the expected value but currently I get:
org.apache.camel.CamelExchangeException: Invalid correlation key.
Exchange[test_complete.csv]
at
org.apache.camel.processor.aggregate.AggregateProcessor.doProcess(AggregateProcessor.java:204)
at
org.apache.camel.processor.aggregate.AggregateProcessor.process(AggregateProcessor.java:179)
at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72)
The question is why the completionPredicate is evaluated after the
aggregation?
At this time I've no 'aggrId' to use (this is only a fake message used as
event).
A possible solution is adding a fake aggrId but I wonder what could be the
right way to solve this case.
I've already tested completionFromBatchConsumer the with no success.
I'm using the following aggregation:
<route>
<from uri="seda:aggregation" />
<!-- aggregate using our strategy and leveldb repo -->
<aggregate strategyRef="rowAggregationStrategy"
aggregationRepositoryRef="aggregationRepository"
completionFromBatchConsumer="false">
<!-- correlate by header with the key id -->
<correlationExpression>
<header>aggrId</header>
</correlationExpression>
<completionPredicate>
<simple>${in.header.complId} == 'END_${exchangeId}'</simple>
</completionPredicate>
<!-- send aggregated messages to the mock endpoint -->
<to uri="seda:marshaller" />
</aggregate>
</route>
When the aggregation may be concluded I send an empty message with the
'complId' set to the expected value but currently I get:
org.apache.camel.CamelExchangeException: Invalid correlation key.
Exchange[test_complete.csv]
at
org.apache.camel.processor.aggregate.AggregateProcessor.doProcess(AggregateProcessor.java:204)
at
org.apache.camel.processor.aggregate.AggregateProcessor.process(AggregateProcessor.java:179)
at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72)
The question is why the completionPredicate is evaluated after the
aggregation?
At this time I've no 'aggrId' to use (this is only a fake message used as
event).
A possible solution is adding a fake aggrId but I wonder what could be the
right way to solve this case.
I've already tested completionFromBatchConsumer the with no success.