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 Details

  • 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

      public String toString()
      Overrides:
      toString in class Object
    • 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
    • getStatistics

      public AggregateProcessorStatistics 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

      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)
    • getTimeoutCheckerExecutorService

      public ScheduledExecutorService getTimeoutCheckerExecutorService()
    • isShutdownTimeoutCheckerExecutorService

      public boolean isShutdownTimeoutCheckerExecutorService()
    • setShutdownTimeoutCheckerExecutorService

      public void setShutdownTimeoutCheckerExecutorService(boolean shutdownTimeoutCheckerExecutorService)
    • setOptimisticLockingExecutorService

      public void setOptimisticLockingExecutorService(ScheduledExecutorService optimisticLockingExecutorService)
    • getOptimisticLockingExecutorService

      public ScheduledExecutorService getOptimisticLockingExecutorService()
    • isShutdownOptimisticLockingExecutorService

      public boolean isShutdownOptimisticLockingExecutorService()
    • setShutdownOptimisticLockingExecutorService

      public void setShutdownOptimisticLockingExecutorService(boolean shutdownOptimisticLockingExecutorService)
    • setOptimisticLockRetryPolicy

      public void setOptimisticLockRetryPolicy(OptimisticLockRetryPolicy optimisticLockRetryPolicy)
    • getOptimisticLockRetryPolicy

      public OptimisticLockRetryPolicy 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

      public AggregateController getAggregateController()
    • setAggregateController

      public void setAggregateController(AggregateController aggregateController)
    • doStart

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

      protected void doStop() throws Exception
      Overrides:
      doStop in class org.apache.camel.support.service.BaseService
      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()