Class AggregateProcessor
java.lang.Object
org.apache.camel.support.service.BaseService
org.apache.camel.support.service.ServiceSupport
org.apache.camel.support.AsyncProcessorSupport
org.apache.camel.processor.aggregate.AggregateProcessor
- All Implemented Interfaces:
AutoCloseable
,org.apache.camel.AsyncProcessor
,org.apache.camel.Navigate<org.apache.camel.Processor>
,org.apache.camel.Processor
,org.apache.camel.Service
,org.apache.camel.ShutdownableService
,org.apache.camel.spi.HasId
,org.apache.camel.spi.IdAware
,org.apache.camel.spi.RouteIdAware
,org.apache.camel.spi.ShutdownAware
,org.apache.camel.spi.ShutdownPrepared
,org.apache.camel.StatefulService
,org.apache.camel.SuspendableService
,org.apache.camel.Traceable
public class AggregateProcessor
extends org.apache.camel.support.AsyncProcessorSupport
implements org.apache.camel.Navigate<org.apache.camel.Processor>, org.apache.camel.Traceable, org.apache.camel.spi.ShutdownPrepared, org.apache.camel.spi.ShutdownAware, org.apache.camel.spi.IdAware, org.apache.camel.spi.RouteIdAware
An implementation of the Aggregator pattern where a batch of
messages is processed (up to a maximum amount or until some timeout is reached) and messages for the same correlation
key are combined using some kind of
AggregationStrategy
(by default the latest message is used) to compress
many message exchanges into a smaller number of exchanges.
A good example of this is stock market data; you may be receiving 30,000 messages/second, and you may want to
throttle it right down so that multiple messages for the same stock are combined (or just the latest message is used
and older prices to be discarded). Another idea is to combine line item messages together into a single invoice
message.-
Field Summary
Modifier and TypeFieldDescriptionstatic final String
static final String
static final String
static final String
static final String
static final String
static final String
static final String
static final String
Fields inherited from class org.apache.camel.support.service.BaseService
BUILT, FAILED, INITIALIZED, INITIALIZING, NEW, SHUTDOWN, SHUTTING_DOWN, STARTED, STARTING, status, STOPPED, STOPPING, SUSPENDED, SUSPENDING
-
Constructor Summary
ConstructorDescriptionAggregateProcessor
(org.apache.camel.CamelContext camelContext, org.apache.camel.AsyncProcessor processor, org.apache.camel.Expression correlationExpression, org.apache.camel.AggregationStrategy aggregationStrategy, ExecutorService executorService, boolean shutdownExecutorService) -
Method Summary
Modifier and TypeMethodDescriptionvoid
Clear all the closed correlation keys stored in the cacheboolean
deferShutdown
(org.apache.camel.ShutdownRunningTask shutdownRunningTask) protected void
doAggregationComplete
(String complete, List<org.apache.camel.Exchange> list, String key, org.apache.camel.Exchange originalExchange, org.apache.camel.Exchange answer, boolean aggregateFailed) protected void
doAggregationRepositoryAdd
(org.apache.camel.CamelContext camelContext, String key, org.apache.camel.Exchange oldExchange, org.apache.camel.Exchange newExchange) protected boolean
doInOptimisticLock
(org.apache.camel.Exchange exchange, String key, org.apache.camel.AsyncCallback callback, int attempt, boolean sync) protected boolean
doProcess
(org.apache.camel.Exchange exchange, String key, org.apache.camel.AsyncCallback callback, boolean sync) protected boolean
doProcess
(org.apache.camel.Exchange exchange, org.apache.camel.AsyncCallback callback) protected void
protected void
doStart()
protected void
doStop()
int
int
int
int
org.apache.camel.spi.AggregationRepository
org.apache.camel.AggregationStrategy
int
Current number of closed correlation keys in the memory cachelong
org.apache.camel.Predicate
int
org.apache.camel.Expression
long
long
org.apache.camel.Expression
org.apache.camel.Expression
org.apache.camel.spi.ExceptionHandler
getId()
int
int
boolean
hasNext()
boolean
protected String
isCompleted
(String key, org.apache.camel.Exchange exchange) Tests whether the given exchange is complete or notboolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
protected String
isPreCompleted
(String key, org.apache.camel.Exchange oldExchange, org.apache.camel.Exchange newExchange) Tests whether the given exchanges is pre-complete or notboolean
boolean
List
<org.apache.camel.Processor> next()
protected org.apache.camel.Exchange
onAggregation
(org.apache.camel.Exchange oldExchange, org.apache.camel.Exchange newExchange) protected org.apache.camel.Exchange
onCompletion
(String key, org.apache.camel.Exchange original, org.apache.camel.Exchange aggregated, boolean fromTimeout, boolean aggregateFailed) protected void
onOptimisticLockingFailure
(org.apache.camel.Exchange oldExchange, org.apache.camel.Exchange newExchange) void
prepareShutdown
(boolean suspendOnly, boolean forced) boolean
process
(org.apache.camel.Exchange exchange, org.apache.camel.AsyncCallback callback) protected void
Restores the timeout map with timeout values from the aggregation repository.void
setAggregateController
(AggregateController aggregateController) void
setAggregationRepository
(org.apache.camel.spi.AggregationRepository aggregationRepository) void
setAggregationStrategy
(org.apache.camel.AggregationStrategy aggregationStrategy) void
setCloseCorrelationKeyOnCompletion
(Integer closeCorrelationKeyOnCompletion) void
setCompleteAllOnStop
(boolean completeAllOnStop) void
setCompletionFromBatchConsumer
(boolean completionFromBatchConsumer) void
setCompletionInterval
(long completionInterval) void
setCompletionOnNewCorrelationGroup
(boolean completionOnNewCorrelationGroup) void
setCompletionPredicate
(org.apache.camel.Predicate completionPredicate) void
setCompletionSize
(int completionSize) void
setCompletionSizeExpression
(org.apache.camel.Expression completionSizeExpression) void
setCompletionTimeout
(long completionTimeout) void
setCompletionTimeoutCheckerInterval
(long completionTimeoutCheckerInterval) void
setCompletionTimeoutExpression
(org.apache.camel.Expression completionTimeoutExpression) void
setCorrelationExpression
(org.apache.camel.Expression correlationExpression) void
setDiscardOnAggregationFailure
(boolean discardOnAggregationFailure) void
setDiscardOnCompletionTimeout
(boolean discardOnCompletionTimeout) void
setEagerCheckCompletion
(boolean eagerCheckCompletion) void
setExceptionHandler
(org.apache.camel.spi.ExceptionHandler exceptionHandler) void
setForceCompletionOnStop
(boolean forceCompletionOnStop) void
void
setIgnoreInvalidCorrelationKeys
(boolean ignoreInvalidCorrelationKeys) void
setOptimisticLocking
(boolean optimisticLocking) void
setOptimisticLockingExecutorService
(ScheduledExecutorService optimisticLockingExecutorService) void
setOptimisticLockRetryPolicy
(OptimisticLockRetryPolicy optimisticLockRetryPolicy) void
setParallelProcessing
(boolean parallelProcessing) void
setRouteId
(String routeId) void
setShutdownOptimisticLockingExecutorService
(boolean shutdownOptimisticLockingExecutorService) void
setShutdownTimeoutCheckerExecutorService
(boolean shutdownTimeoutCheckerExecutorService) void
setTimeoutCheckerExecutorService
(ScheduledExecutorService timeoutCheckerExecutorService) toString()
protected void
trackTimeout
(String key, org.apache.camel.Exchange exchange) Methods inherited from class org.apache.camel.support.AsyncProcessorSupport
process, processAsync
Methods inherited from class org.apache.camel.support.service.BaseService
build, doBuild, doFail, doInit, doLifecycleChange, doResume, doSuspend, fail, getStatus, init, isBuild, isInit, isNew, isRunAllowed, isShutdown, isStarted, isStarting, isStartingOrStarted, isStopped, isStopping, isStoppingOrStopped, isSuspended, isSuspending, isSuspendingOrSuspended, resume, shutdown, start, stop, suspend
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.apache.camel.spi.IdAware
setGeneratedId
Methods inherited from interface org.apache.camel.Service
build, close, init, start, stop
Methods inherited from interface org.apache.camel.ShutdownableService
shutdown
Methods inherited from interface org.apache.camel.StatefulService
getStatus, isRunAllowed, isStarted, isStarting, isStopped, isStopping, isSuspending
Methods inherited from interface org.apache.camel.SuspendableService
isSuspended, resume, suspend
-
Field Details
-
AGGREGATE_TIMEOUT_CHECKER
- See Also:
-
AGGREGATE_OPTIMISTIC_LOCKING_EXECUTOR
- See Also:
-
COMPLETED_BY_SIZE
- See Also:
-
COMPLETED_BY_PREDICATE
- See Also:
-
COMPLETED_BY_CONSUMER
- See Also:
-
COMPLETED_BY_STRATEGY
- See Also:
-
COMPLETED_BY_INTERVAL
- See Also:
-
COMPLETED_BY_TIMEOUT
- See Also:
-
COMPLETED_BY_FORCE
- See Also:
-
-
Constructor Details
-
AggregateProcessor
public AggregateProcessor(org.apache.camel.CamelContext camelContext, org.apache.camel.AsyncProcessor processor, org.apache.camel.Expression correlationExpression, org.apache.camel.AggregationStrategy aggregationStrategy, ExecutorService executorService, boolean shutdownExecutorService)
-
-
Method Details
-
toString
-
getTraceLabel
- Specified by:
getTraceLabel
in interfaceorg.apache.camel.Traceable
-
next
- Specified by:
next
in interfaceorg.apache.camel.Navigate<org.apache.camel.Processor>
-
hasNext
public boolean hasNext()- Specified by:
hasNext
in interfaceorg.apache.camel.Navigate<org.apache.camel.Processor>
-
getId
- Specified by:
getId
in interfaceorg.apache.camel.spi.HasId
-
setId
- Specified by:
setId
in interfaceorg.apache.camel.spi.IdAware
-
getRouteId
- Specified by:
getRouteId
in interfaceorg.apache.camel.spi.RouteIdAware
-
setRouteId
- Specified by:
setRouteId
in interfaceorg.apache.camel.spi.RouteIdAware
-
process
public boolean process(org.apache.camel.Exchange exchange, org.apache.camel.AsyncCallback callback) - Specified by:
process
in interfaceorg.apache.camel.AsyncProcessor
-
doProcess
protected boolean doProcess(org.apache.camel.Exchange exchange, org.apache.camel.AsyncCallback callback) throws Exception - Throws:
Exception
-
doInOptimisticLock
protected boolean doInOptimisticLock(org.apache.camel.Exchange exchange, String key, org.apache.camel.AsyncCallback callback, int attempt, boolean sync) -
doProcess
protected boolean doProcess(org.apache.camel.Exchange exchange, String key, org.apache.camel.AsyncCallback callback, boolean sync) -
doAggregationComplete
-
doAggregationRepositoryAdd
protected void doAggregationRepositoryAdd(org.apache.camel.CamelContext camelContext, String key, org.apache.camel.Exchange oldExchange, org.apache.camel.Exchange newExchange) -
onOptimisticLockingFailure
protected void onOptimisticLockingFailure(org.apache.camel.Exchange oldExchange, org.apache.camel.Exchange newExchange) -
isPreCompleted
protected String isPreCompleted(String key, org.apache.camel.Exchange oldExchange, org.apache.camel.Exchange newExchange) Tests whether the given exchanges is pre-complete or not- Parameters:
key
- the correlation keyoldExchange
- the existing exchangenewExchange
- the incoming exchange- Returns:
- null if not pre-completed, otherwise a String with the type that triggered the pre-completion
-
isCompleted
Tests whether the given exchange is complete or not- Parameters:
key
- the correlation keyexchange
- the incoming exchange- Returns:
- null if not completed, otherwise a String with the type that triggered the completion
-
trackTimeout
-
onAggregation
protected org.apache.camel.Exchange onAggregation(org.apache.camel.Exchange oldExchange, org.apache.camel.Exchange newExchange) -
onCompletion
protected org.apache.camel.Exchange onCompletion(String key, org.apache.camel.Exchange original, org.apache.camel.Exchange aggregated, boolean fromTimeout, boolean aggregateFailed) -
restoreTimeoutMapFromAggregationRepository
Restores the timeout map with timeout values from the aggregation repository. This is needed in case the aggregator has been stopped and started again (for example a server restart). Then the existing exchanges from theAggregationRepository
must have their timeout conditions restored.- Throws:
Exception
-
getClosedCorrelationKeysCacheSize
public int getClosedCorrelationKeysCacheSize()Current number of closed correlation keys in the memory cache -
clearClosedCorrelationKeysCache
public void clearClosedCorrelationKeysCache()Clear all the closed correlation keys stored in the cache -
getStatistics
-
getInProgressCompleteExchanges
public int getInProgressCompleteExchanges() -
getCompletionPredicate
public org.apache.camel.Predicate getCompletionPredicate() -
setCompletionPredicate
public void setCompletionPredicate(org.apache.camel.Predicate completionPredicate) -
isEagerCheckCompletion
public boolean isEagerCheckCompletion() -
setEagerCheckCompletion
public void setEagerCheckCompletion(boolean eagerCheckCompletion) -
getCompletionTimeout
public long getCompletionTimeout() -
setCompletionTimeout
public void setCompletionTimeout(long completionTimeout) -
getCompletionTimeoutExpression
public org.apache.camel.Expression getCompletionTimeoutExpression() -
setCompletionTimeoutExpression
public void setCompletionTimeoutExpression(org.apache.camel.Expression completionTimeoutExpression) -
getCompletionInterval
public long getCompletionInterval() -
setCompletionInterval
public void setCompletionInterval(long completionInterval) -
getCompletionSize
public int getCompletionSize() -
setCompletionSize
public void setCompletionSize(int completionSize) -
getCompletionSizeExpression
public org.apache.camel.Expression getCompletionSizeExpression() -
setCompletionSizeExpression
public void setCompletionSizeExpression(org.apache.camel.Expression completionSizeExpression) -
isIgnoreInvalidCorrelationKeys
public boolean isIgnoreInvalidCorrelationKeys() -
setIgnoreInvalidCorrelationKeys
public void setIgnoreInvalidCorrelationKeys(boolean ignoreInvalidCorrelationKeys) -
getCloseCorrelationKeyOnCompletion
-
setCloseCorrelationKeyOnCompletion
-
isCompletionFromBatchConsumer
public boolean isCompletionFromBatchConsumer() -
setCompletionFromBatchConsumer
public void setCompletionFromBatchConsumer(boolean completionFromBatchConsumer) -
isCompletionOnNewCorrelationGroup
public boolean isCompletionOnNewCorrelationGroup() -
setCompletionOnNewCorrelationGroup
public void setCompletionOnNewCorrelationGroup(boolean completionOnNewCorrelationGroup) -
isCompleteAllOnStop
public boolean isCompleteAllOnStop() -
getCompletionTimeoutCheckerInterval
public long getCompletionTimeoutCheckerInterval() -
setCompletionTimeoutCheckerInterval
public void setCompletionTimeoutCheckerInterval(long completionTimeoutCheckerInterval) -
getExceptionHandler
public org.apache.camel.spi.ExceptionHandler getExceptionHandler() -
setExceptionHandler
public void setExceptionHandler(org.apache.camel.spi.ExceptionHandler exceptionHandler) -
isParallelProcessing
public boolean isParallelProcessing() -
setParallelProcessing
public void setParallelProcessing(boolean parallelProcessing) -
isOptimisticLocking
public boolean isOptimisticLocking() -
setOptimisticLocking
public void setOptimisticLocking(boolean optimisticLocking) -
getAggregationRepository
public org.apache.camel.spi.AggregationRepository getAggregationRepository() -
setAggregationRepository
public void setAggregationRepository(org.apache.camel.spi.AggregationRepository aggregationRepository) -
isDiscardOnCompletionTimeout
public boolean isDiscardOnCompletionTimeout() -
setDiscardOnCompletionTimeout
public void setDiscardOnCompletionTimeout(boolean discardOnCompletionTimeout) -
isDiscardOnAggregationFailure
public boolean isDiscardOnAggregationFailure() -
setDiscardOnAggregationFailure
public void setDiscardOnAggregationFailure(boolean discardOnAggregationFailure) -
setForceCompletionOnStop
public void setForceCompletionOnStop(boolean forceCompletionOnStop) -
setCompleteAllOnStop
public void setCompleteAllOnStop(boolean completeAllOnStop) -
setTimeoutCheckerExecutorService
public void setTimeoutCheckerExecutorService(ScheduledExecutorService timeoutCheckerExecutorService) -
getTimeoutCheckerExecutorService
-
isShutdownTimeoutCheckerExecutorService
public boolean isShutdownTimeoutCheckerExecutorService() -
setShutdownTimeoutCheckerExecutorService
public void setShutdownTimeoutCheckerExecutorService(boolean shutdownTimeoutCheckerExecutorService) -
setOptimisticLockingExecutorService
public void setOptimisticLockingExecutorService(ScheduledExecutorService optimisticLockingExecutorService) -
getOptimisticLockingExecutorService
-
isShutdownOptimisticLockingExecutorService
public boolean isShutdownOptimisticLockingExecutorService() -
setShutdownOptimisticLockingExecutorService
public void setShutdownOptimisticLockingExecutorService(boolean shutdownOptimisticLockingExecutorService) -
setOptimisticLockRetryPolicy
-
getOptimisticLockRetryPolicy
-
getAggregationStrategy
public org.apache.camel.AggregationStrategy getAggregationStrategy() -
setAggregationStrategy
public void setAggregationStrategy(org.apache.camel.AggregationStrategy aggregationStrategy) -
getCorrelationExpression
public org.apache.camel.Expression getCorrelationExpression() -
setCorrelationExpression
public void setCorrelationExpression(org.apache.camel.Expression correlationExpression) -
getAggregateController
-
setAggregateController
-
doStart
- Overrides:
doStart
in classorg.apache.camel.support.service.BaseService
- Throws:
Exception
-
doStop
- Overrides:
doStop
in classorg.apache.camel.support.service.BaseService
- Throws:
Exception
-
prepareShutdown
public void prepareShutdown(boolean suspendOnly, boolean forced) - Specified by:
prepareShutdown
in interfaceorg.apache.camel.spi.ShutdownPrepared
-
deferShutdown
public boolean deferShutdown(org.apache.camel.ShutdownRunningTask shutdownRunningTask) - Specified by:
deferShutdown
in interfaceorg.apache.camel.spi.ShutdownAware
-
getPendingExchangesSize
public int getPendingExchangesSize()- Specified by:
getPendingExchangesSize
in interfaceorg.apache.camel.spi.ShutdownAware
-
doShutdown
- Overrides:
doShutdown
in classorg.apache.camel.support.service.BaseService
- Throws:
Exception
-
forceCompletionOfGroup
-
forceCompletionOfAllGroups
public int forceCompletionOfAllGroups() -
forceDiscardingOfGroup
-
forceDiscardingOfAllGroups
public int forceDiscardingOfAllGroups()
-