Class ConcurrentRequestsThrottler

java.lang.Object
org.apache.camel.support.service.BaseService
org.apache.camel.support.service.ServiceSupport
org.apache.camel.support.AsyncProcessorSupport
org.apache.camel.processor.AbstractThrottler
org.apache.camel.processor.ConcurrentRequestsThrottler
All Implemented Interfaces:
AutoCloseable, org.apache.camel.AsyncProcessor, org.apache.camel.Processor, Throttler, 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.StatefulService, org.apache.camel.SuspendableService, org.apache.camel.Traceable

public class ConcurrentRequestsThrottler extends AbstractThrottler
A Throttler will set a limit on the maximum number of message exchanges which can be sent to a processor concurrently.

This pattern can be extremely useful if you have some external system which meters access; such as only allowing 10 concurrent requests; or if huge load can cause a particular system to malfunction or to reduce its throughput you might want to introduce some throttling. This throttle implementation is thread-safe and is therefore safe to be used by multiple concurrent threads in a single route. The throttling mechanism is a Semaphore with maxConcurrentRequests permits on it. Callers trying to acquire a permit will block if necessary when maxConcurrentRequests permits have been acquired.

  • Constructor Details

    • ConcurrentRequestsThrottler

      public ConcurrentRequestsThrottler(org.apache.camel.CamelContext camelContext, org.apache.camel.Expression maxRequestsExpression, ScheduledExecutorService asyncExecutor, boolean shutdownAsyncExecutor, boolean rejectExecution, org.apache.camel.Expression correlation)
  • Method Details

    • process

      public boolean process(org.apache.camel.Exchange exchange, org.apache.camel.AsyncCallback callback)
    • processAsynchronously

      protected boolean processAsynchronously(org.apache.camel.Exchange exchange, org.apache.camel.AsyncCallback callback, org.apache.camel.processor.ConcurrentRequestsThrottler.ThrottlingState throttlingState)
      Delegate blocking to an asyncExecutor. Except if the executor rejects the submission and isCallerRunsWhenRejected() is enabled, then this method will delegate back to process(), but not before changing the exchange state to stop any recursion.
    • doStart

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

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

      public String getMode()
      Specified by:
      getMode in interface Throttler
      Specified by:
      getMode in class AbstractThrottler
    • getCurrentMaximumRequests

      public int getCurrentMaximumRequests()
      Gets the current maximum request. If it is grouped throttling applied with correlationExpression then the max within the group will return
    • getTraceLabel

      public String getTraceLabel()
    • toString

      public String toString()
      Overrides:
      toString in class Object