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.-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected static final classSynchronization class to avoid busy-loop when waiting for exchanges to be processed during shutdown. -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final Stringstatic final StringFields 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
ConstructorsConstructorDescriptionAggregateProcessor(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 TypeMethodDescriptionvoidClear all the closed correlation keys stored in the cachebooleandeferShutdown(org.apache.camel.ShutdownRunningTask shutdownRunningTask) protected voiddoAggregationComplete(String complete, List<org.apache.camel.Exchange> list, String key, org.apache.camel.Exchange originalExchange, org.apache.camel.Exchange answer, boolean aggregateFailed) protected voiddoAggregationRepositoryAdd(org.apache.camel.CamelContext camelContext, String key, org.apache.camel.Exchange oldExchange, org.apache.camel.Exchange newExchange) protected booleandoInOptimisticLock(org.apache.camel.Exchange exchange, String key, org.apache.camel.AsyncCallback callback, int attempt, boolean sync) protected booleandoProcess(org.apache.camel.Exchange exchange, String key, org.apache.camel.AsyncCallback callback, boolean sync) protected booleandoProcess(org.apache.camel.Exchange exchange, org.apache.camel.AsyncCallback callback) protected voidprotected voiddoStart()protected voiddoStop()intintintintorg.apache.camel.spi.AggregationRepositoryorg.apache.camel.AggregationStrategyintCurrent number of closed correlation keys in the memory cachelongorg.apache.camel.Predicateintorg.apache.camel.Expressionlonglongorg.apache.camel.Expressionorg.apache.camel.Expressionorg.apache.camel.spi.ExceptionHandlergetId()intintbooleanhasNext()booleanprotected StringisCompleted(String key, org.apache.camel.Exchange exchange) Tests whether the given exchange is complete or notbooleanbooleanbooleanbooleanbooleanbooleanbooleanbooleanprotected StringisPreCompleted(String key, org.apache.camel.Exchange oldExchange, org.apache.camel.Exchange newExchange) Tests whether the given exchanges is pre-complete or notbooleanbooleanList<org.apache.camel.Processor> next()protected org.apache.camel.ExchangeonAggregation(org.apache.camel.Exchange oldExchange, org.apache.camel.Exchange newExchange) protected org.apache.camel.ExchangeonCompletion(String key, org.apache.camel.Exchange original, org.apache.camel.Exchange aggregated, boolean fromTimeout, boolean aggregateFailed) protected voidonOptimisticLockingFailure(org.apache.camel.Exchange oldExchange, org.apache.camel.Exchange newExchange) voidprepareShutdown(boolean suspendOnly, boolean forced) booleanprocess(org.apache.camel.Exchange exchange, org.apache.camel.AsyncCallback callback) protected voidRestores the timeout map with timeout values from the aggregation repository.voidsetAggregateController(AggregateController aggregateController) voidsetAggregationRepository(org.apache.camel.spi.AggregationRepository aggregationRepository) voidsetAggregationStrategy(org.apache.camel.AggregationStrategy aggregationStrategy) voidsetCloseCorrelationKeyOnCompletion(Integer closeCorrelationKeyOnCompletion) voidsetCompleteAllOnStop(boolean completeAllOnStop) voidsetCompletionFromBatchConsumer(boolean completionFromBatchConsumer) voidsetCompletionInterval(long completionInterval) voidsetCompletionOnNewCorrelationGroup(boolean completionOnNewCorrelationGroup) voidsetCompletionPredicate(org.apache.camel.Predicate completionPredicate) voidsetCompletionSize(int completionSize) voidsetCompletionSizeExpression(org.apache.camel.Expression completionSizeExpression) voidsetCompletionTimeout(long completionTimeout) voidsetCompletionTimeoutCheckerInterval(long completionTimeoutCheckerInterval) voidsetCompletionTimeoutExpression(org.apache.camel.Expression completionTimeoutExpression) voidsetCorrelationExpression(org.apache.camel.Expression correlationExpression) voidsetDiscardOnAggregationFailure(boolean discardOnAggregationFailure) voidsetDiscardOnCompletionTimeout(boolean discardOnCompletionTimeout) voidsetEagerCheckCompletion(boolean eagerCheckCompletion) voidsetExceptionHandler(org.apache.camel.spi.ExceptionHandler exceptionHandler) voidsetForceCompletionOnStop(boolean forceCompletionOnStop) voidvoidsetIgnoreInvalidCorrelationKeys(boolean ignoreInvalidCorrelationKeys) voidsetOptimisticLocking(boolean optimisticLocking) voidsetOptimisticLockingExecutorService(ScheduledExecutorService optimisticLockingExecutorService) voidsetOptimisticLockRetryPolicy(OptimisticLockRetryPolicy optimisticLockRetryPolicy) voidsetParallelProcessing(boolean parallelProcessing) voidsetRouteId(String routeId) voidsetShutdownOptimisticLockingExecutorService(boolean shutdownOptimisticLockingExecutorService) voidsetShutdownTimeoutCheckerExecutorService(boolean shutdownTimeoutCheckerExecutorService) voidsetTimeoutCheckerExecutorService(ScheduledExecutorService timeoutCheckerExecutorService) toString()protected voidtrackTimeout(String key, org.apache.camel.Exchange exchange) Methods inherited from class org.apache.camel.support.AsyncProcessorSupport
process, processAsyncMethods inherited from class org.apache.camel.support.service.BaseService
build, doBuild, doFail, doInit, doLifecycleChange, doResume, doSuspend, fail, getInternalLock, getStatus, init, isBuild, isInit, isNew, isRunAllowed, isShutdown, isStarted, isStarting, isStartingOrStarted, isStopped, isStopping, isStoppingOrStopped, isSuspended, isSuspending, isSuspendingOrSuspended, resume, shutdown, start, stop, suspendMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.apache.camel.spi.IdAware
setGeneratedIdMethods inherited from interface org.apache.camel.Service
build, close, init, start, stopMethods inherited from interface org.apache.camel.ShutdownableService
shutdownMethods inherited from interface org.apache.camel.StatefulService
getStatus, isRunAllowed, isStarted, isStarting, isStopped, isStopping, isSuspendingMethods 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:
getTraceLabelin interfaceorg.apache.camel.Traceable
-
next
- Specified by:
nextin interfaceorg.apache.camel.Navigate<org.apache.camel.Processor>
-
hasNext
public boolean hasNext()- Specified by:
hasNextin interfaceorg.apache.camel.Navigate<org.apache.camel.Processor>
-
getId
- Specified by:
getIdin interfaceorg.apache.camel.spi.HasId
-
setId
- Specified by:
setIdin interfaceorg.apache.camel.spi.IdAware
-
getRouteId
- Specified by:
getRouteIdin interfaceorg.apache.camel.spi.RouteIdAware
-
setRouteId
- Specified by:
setRouteIdin interfaceorg.apache.camel.spi.RouteIdAware
-
process
public boolean process(org.apache.camel.Exchange exchange, org.apache.camel.AsyncCallback callback) - Specified by:
processin 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 theAggregationRepositorymust 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:
doStartin classorg.apache.camel.support.service.BaseService- Throws:
Exception
-
doStop
- Overrides:
doStopin classorg.apache.camel.support.service.BaseService- Throws:
Exception
-
prepareShutdown
public void prepareShutdown(boolean suspendOnly, boolean forced) - Specified by:
prepareShutdownin interfaceorg.apache.camel.spi.ShutdownPrepared
-
deferShutdown
public boolean deferShutdown(org.apache.camel.ShutdownRunningTask shutdownRunningTask) - Specified by:
deferShutdownin interfaceorg.apache.camel.spi.ShutdownAware
-
getPendingExchangesSize
public int getPendingExchangesSize()- Specified by:
getPendingExchangesSizein interfaceorg.apache.camel.spi.ShutdownAware
-
doShutdown
- Overrides:
doShutdownin classorg.apache.camel.support.service.BaseService- Throws:
Exception
-
forceCompletionOfGroup
-
forceCompletionOfAllGroups
public int forceCompletionOfAllGroups() -
forceDiscardingOfGroup
-
forceDiscardingOfAllGroups
public int forceDiscardingOfAllGroups()
-