Class ThrottlingExceptionRoutePolicy

java.lang.Object
org.apache.camel.support.service.BaseService
org.apache.camel.support.service.ServiceSupport
org.apache.camel.support.RoutePolicySupport
org.apache.camel.throttling.ThrottlingExceptionRoutePolicy
All Implemented Interfaces:
AutoCloseable, org.apache.camel.CamelContextAware, org.apache.camel.RouteAware, org.apache.camel.Service, org.apache.camel.ShutdownableService, org.apache.camel.spi.HasCamelContext, org.apache.camel.spi.RoutePolicy, org.apache.camel.StatefulService, org.apache.camel.SuspendableService

@Metadata(label="bean", description="A throttle based RoutePolicy which is modelled after the circuit breaker and will stop consuming from an endpoint based on the type of exceptions that are thrown and the threshold settings.", annotations="interfaceName=org.apache.camel.spi.RoutePolicy") @Configurer(metadataOnly=true) public class ThrottlingExceptionRoutePolicy extends RoutePolicySupport implements org.apache.camel.CamelContextAware, org.apache.camel.RouteAware
Modeled after the circuit breaker ThrottlingInflightRoutePolicy this RoutePolicy will stop consuming from an endpoint based on the type of exceptions that are thrown and the threshold setting. The scenario: if a route cannot process data from an endpoint due to problems with resources used by the route (ie database down) then it will stop consuming new messages from the endpoint by stopping the consumer. The implementation is comparable to the Circuit Breaker pattern. After a set amount of time, it will move to a half open state and attempt to determine if the consumer can be started. There are two ways to determine if a route can be closed after being opened (1) start the consumer and check the failure threshold (2) call the ThrottlingExceptionHalfOpenHandler The second option allows a custom check to be performed without having to take on the possibility of multiple messages from the endpoint. The idea is that a handler could run a simple test (ie select 1 from dual) to determine if the processes that cause the route to be open are now available
  • Constructor Details

    • ThrottlingExceptionRoutePolicy

      public ThrottlingExceptionRoutePolicy()
    • ThrottlingExceptionRoutePolicy

      public ThrottlingExceptionRoutePolicy(int threshold, long failureWindow, long halfOpenAfter, List<Class<?>> handledExceptions)
    • ThrottlingExceptionRoutePolicy

      public ThrottlingExceptionRoutePolicy(int threshold, long failureWindow, long halfOpenAfter, List<Class<?>> handledExceptions, boolean keepOpen)
  • Method Details

    • setCamelContext

      public void setCamelContext(org.apache.camel.CamelContext camelContext)
      Specified by:
      setCamelContext in interface org.apache.camel.CamelContextAware
    • getCamelContext

      public org.apache.camel.CamelContext getCamelContext()
      Specified by:
      getCamelContext in interface org.apache.camel.spi.HasCamelContext
    • getRoute

      public org.apache.camel.Route getRoute()
      Specified by:
      getRoute in interface org.apache.camel.RouteAware
    • setRoute

      public void setRoute(org.apache.camel.Route route)
      Specified by:
      setRoute in interface org.apache.camel.RouteAware
    • getThrottledExceptions

      public List<Class<?>> getThrottledExceptions()
    • getExceptions

      public String getExceptions()
    • setExceptions

      public void setExceptions(String exceptions)
    • doInit

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

      public void onInit(org.apache.camel.Route route)
      Specified by:
      onInit in interface org.apache.camel.spi.RoutePolicy
      Overrides:
      onInit in class RoutePolicySupport
    • onStart

      public void onStart(org.apache.camel.Route route)
      Specified by:
      onStart in interface org.apache.camel.spi.RoutePolicy
      Overrides:
      onStart in class RoutePolicySupport
    • doStop

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

      public void onExchangeDone(org.apache.camel.Route route, org.apache.camel.Exchange exchange)
      Specified by:
      onExchangeDone in interface org.apache.camel.spi.RoutePolicy
      Overrides:
      onExchangeDone in class RoutePolicySupport
    • isThresholdExceeded

      protected boolean isThresholdExceeded()
    • openCircuit

      protected void openCircuit(org.apache.camel.Route route)
    • addHalfOpenTimer

      protected void addHalfOpenTimer(org.apache.camel.Route route)
    • halfOpenCircuit

      protected void halfOpenCircuit(org.apache.camel.Route route)
    • closeCircuit

      protected void closeCircuit(org.apache.camel.Route route)
    • getStateAsString

      public String getStateAsString()
    • dumpState

      public String dumpState()
    • getHalfOpenHandler

      public ThrottlingExceptionHalfOpenHandler getHalfOpenHandler()
    • setHalfOpenHandler

      public void setHalfOpenHandler(ThrottlingExceptionHalfOpenHandler halfOpenHandler)
    • getKeepOpen

      public boolean getKeepOpen()
    • setKeepOpen

      public void setKeepOpen(boolean keepOpen)
    • getFailureThreshold

      public int getFailureThreshold()
    • setFailureThreshold

      public void setFailureThreshold(int failureThreshold)
    • getFailureWindow

      public long getFailureWindow()
    • setFailureWindow

      public void setFailureWindow(long failureWindow)
    • getHalfOpenAfter

      public long getHalfOpenAfter()
    • setHalfOpenAfter

      public void setHalfOpenAfter(long halfOpenAfter)
    • getFailures

      public int getFailures()
    • getSuccess

      public int getSuccess()
    • getLastFailure

      public long getLastFailure()
    • getOpenedAt

      public long getOpenedAt()
    • getStateLoggingLevel

      public org.apache.camel.LoggingLevel getStateLoggingLevel()
    • setStateLoggingLevel

      public void setStateLoggingLevel(org.apache.camel.LoggingLevel stateLoggingLevel)
    • setStateLoggingLevel

      public void setStateLoggingLevel(String stateLoggingLevel)