Class 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 are processed (up to a maximum amount or until some timeout is reached) and messages for the same correlation key are combined together 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 are discarded). Another idea is to combine line item messages together into a single invoice message.

    • Constructor Detail

      • 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 Detail

      • getTraceLabel

        public String getTraceLabel()
        Specified by:
        getTraceLabel in interface org.apache.camel.Traceable
      • next

        public List<org.apache.camel.Processor> next()
        Specified by:
        next in interface org.apache.camel.Navigate<org.apache.camel.Processor>
      • hasNext

        public boolean hasNext()
        Specified by:
        hasNext in interface org.apache.camel.Navigate<org.apache.camel.Processor>
      • getId

        public String getId()
        Specified by:
        getId in interface org.apache.camel.spi.HasId
      • setId

        public void setId​(String id)
        Specified by:
        setId in interface org.apache.camel.spi.IdAware
      • getRouteId

        public String getRouteId()
        Specified by:
        getRouteId in interface org.apache.camel.spi.RouteIdAware
      • setRouteId

        public void setRouteId​(String routeId)
        Specified by:
        setRouteId in interface org.apache.camel.spi.RouteIdAware
      • process

        public boolean process​(org.apache.camel.Exchange exchange,
                               org.apache.camel.AsyncCallback callback)
        Specified by:
        process in interface org.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

        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)
      • 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 key
        oldExchange - the existing exchange
        newExchange - the incoming exchange
        Returns:
        null if not pre-completed, otherwise a String with the type that triggered the pre-completion
      • isCompleted

        protected String isCompleted​(String key,
                                     org.apache.camel.Exchange exchange)
        Tests whether the given exchange is complete or not
        Parameters:
        key - the correlation key
        exchange - the incoming exchange
        Returns:
        null if not completed, otherwise a String with the type that triggered the completion
      • trackTimeout

        protected void trackTimeout​(String key,
                                    org.apache.camel.Exchange exchange)
      • 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

        protected void restoreTimeoutMapFromAggregationRepository()
                                                           throws Exception
        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 the AggregationRepository 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
      • 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

        public Integer getCloseCorrelationKeyOnCompletion()
      • setCloseCorrelationKeyOnCompletion

        public void setCloseCorrelationKeyOnCompletion​(Integer closeCorrelationKeyOnCompletion)
      • 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)
      • isShutdownTimeoutCheckerExecutorService

        public boolean isShutdownTimeoutCheckerExecutorService()
      • setShutdownTimeoutCheckerExecutorService

        public void setShutdownTimeoutCheckerExecutorService​(boolean shutdownTimeoutCheckerExecutorService)
      • setOptimisticLockingExecutorService

        public void setOptimisticLockingExecutorService​(ScheduledExecutorService optimisticLockingExecutorService)
      • isShutdownOptimisticLockingExecutorService

        public boolean isShutdownOptimisticLockingExecutorService()
      • setShutdownOptimisticLockingExecutorService

        public void setShutdownOptimisticLockingExecutorService​(boolean shutdownOptimisticLockingExecutorService)
      • setOptimisticLockRetryPolicy

        public void setOptimisticLockRetryPolicy​(OptimisticLockRetryPolicy optimisticLockRetryPolicy)
      • 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)
      • setAggregateController

        public void setAggregateController​(AggregateController aggregateController)
      • doStart

        protected void doStart()
                        throws Exception
        Overrides:
        doStart in class org.apache.camel.support.AsyncProcessorSupport
        Throws:
        Exception
      • doStop

        protected void doStop()
                       throws Exception
        Overrides:
        doStop in class org.apache.camel.support.AsyncProcessorSupport
        Throws:
        Exception
      • prepareShutdown

        public void prepareShutdown​(boolean suspendOnly,
                                    boolean forced)
        Specified by:
        prepareShutdown in interface org.apache.camel.spi.ShutdownPrepared
      • deferShutdown

        public boolean deferShutdown​(org.apache.camel.ShutdownRunningTask shutdownRunningTask)
        Specified by:
        deferShutdown in interface org.apache.camel.spi.ShutdownAware
      • getPendingExchangesSize

        public int getPendingExchangesSize()
        Specified by:
        getPendingExchangesSize in interface org.apache.camel.spi.ShutdownAware
      • doShutdown

        protected void doShutdown()
                           throws Exception
        Overrides:
        doShutdown in class org.apache.camel.support.service.BaseService
        Throws:
        Exception
      • forceCompletionOfGroup

        public int forceCompletionOfGroup​(String key)
      • forceCompletionOfAllGroups

        public int forceCompletionOfAllGroups()
      • forceDiscardingOfGroup

        public int forceDiscardingOfGroup​(String key)
      • forceDiscardingOfAllGroups

        public int forceDiscardingOfAllGroups()