Interface ShutdownStrategy

All Superinterfaces:
AutoCloseable, Service, StaticService

public interface ShutdownStrategy extends StaticService
Pluggable shutdown strategy executed during shutdown of Camel and the active routes.

Shutting down routes in a reliable and graceful manner is not a trivial task. Therefore, Camel provides a pluggable strategy allowing 3rd party to use their own strategy if needed.

The shutdown strategy is not intended for Camel end users to use for stopping routes. Instead, use RouteController via CamelContext.

The key problem is to stop the input consumers for the routes such that no new messages is coming into Camel. But at the same time still keep the routes running so the existing in flight exchanges can still be run to completion. On top of that there are some in memory components (such as SEDA) which may have pending messages on its in memory queue which we want to run to completion as well, otherwise they will get lost.

Camel provides a default strategy which supports all that that can be used as inspiration for your own strategy.

See Also:
  • Method Details

    • shutdownForced

      void shutdownForced(CamelContext context, List<RouteStartupOrder> routes) throws Exception
      Shutdown the routes, forcing shutdown being more aggressive, if timeout occurred.

      This operation is used when CamelContext is shutting down, to ensure Camel will shutdown if messages seems to be stuck.

      Parameters:
      context - the camel context
      routes - the routes, ordered by the order they were started
      Throws:
      Exception - is thrown if error shutting down the consumers, however its preferred to avoid this
    • shutdown

      void shutdown(CamelContext context, List<RouteStartupOrder> routes) throws Exception
      Shutdown the routes
      Parameters:
      context - the camel context
      routes - the routes, ordered by the order they were started
      Throws:
      Exception - is thrown if error shutting down the consumers, however its preferred to avoid this
    • suspend

      void suspend(CamelContext context, List<RouteStartupOrder> routes) throws Exception
      Suspends the routes
      Parameters:
      context - the camel context
      routes - the routes, ordered by the order they are started
      Throws:
      Exception - is thrown if error suspending the consumers, however its preferred to avoid this
    • shutdown

      void shutdown(CamelContext context, List<RouteStartupOrder> routes, long timeout, TimeUnit timeUnit) throws Exception
      Shutdown the routes using a specified timeout instead of the default timeout values
      Parameters:
      context - the camel context
      routes - the routes, ordered by the order they are started
      timeout - timeout
      timeUnit - the unit to use
      Throws:
      Exception - is thrown if error shutting down the consumers, however its preferred to avoid this
    • shutdown

      boolean shutdown(CamelContext context, RouteStartupOrder route, long timeout, TimeUnit timeUnit, boolean abortAfterTimeout) throws Exception
      Shutdown the route using a specified timeout instead of the default timeout values and supports abortAfterTimeout mode
      Parameters:
      context - the camel context
      route - the route
      timeout - timeout
      timeUnit - the unit to use
      abortAfterTimeout - should abort shutdown after timeout
      Returns:
      true if the route is stopped before the timeout
      Throws:
      Exception - is thrown if error shutting down the consumer, however its preferred to avoid this
    • suspend

      void suspend(CamelContext context, List<RouteStartupOrder> routes, long timeout, TimeUnit timeUnit) throws Exception
      Suspends the routes using a specified timeout instead of the default timeout values
      Parameters:
      context - the camel context
      routes - the routes, ordered by the order they were started
      timeout - timeout
      timeUnit - the unit to use
      Throws:
      Exception - is thrown if error suspending the consumers, however its preferred to avoid this
    • setTimeout

      void setTimeout(long timeout)
      Set a timeout to wait for the shutdown to complete.

      You must set a positive value. If you want to wait (forever) then use a very high value such as Long.MAX_VALUE

      The default timeout unit is SECONDS

      Parameters:
      timeout - timeout
      Throws:
      IllegalArgumentException - if the timeout value is 0 or negative
    • getTimeout

      long getTimeout()
      Gets the timeout.

      The default timeout unit is SECONDS

      Returns:
      the timeout
    • setTimeUnit

      void setTimeUnit(TimeUnit timeUnit)
      Set the time unit to use
      Parameters:
      timeUnit - the unit to use
    • getTimeUnit

      TimeUnit getTimeUnit()
      Gets the time unit used
      Returns:
      the time unit
    • setSuppressLoggingOnTimeout

      void setSuppressLoggingOnTimeout(boolean suppressLoggingOnTimeout)
      Whether Camel should try to suppress logging during shutdown and timeout was triggered, meaning forced shutdown is happening. And during forced shutdown we want to avoid logging errors/warnings et al. in the logs as a side effect of the forced timeout.

      By default this is false

      Notice the suppression is a best effort as there may still be some logs coming from 3rd party libraries and whatnot, which Camel cannot control.

      Parameters:
      suppressLoggingOnTimeout - true to suppress logging, false to log as usual.
    • isSuppressLoggingOnTimeout

      boolean isSuppressLoggingOnTimeout()
      Whether Camel should try to suppress logging during shutdown and timeout was triggered, meaning forced shutdown is happening. And during forced shutdown we want to avoid logging errors/warnings et al. in the logs as a side effect of the forced timeout.

      By default this is false

      Notice the suppression is a best effort as there may still be some logs coming from 3rd party libraries and whatnot, which Camel cannot control.

    • setShutdownNowOnTimeout

      void setShutdownNowOnTimeout(boolean shutdownNowOnTimeout)
      Sets whether to force shutdown of all consumers when a timeout occurred and thus not all consumers was shutdown within that period.

      You should have good reasons to set this option to false as it means that the routes keep running and is halted abruptly when CamelContext has been shutdown.

      Parameters:
      shutdownNowOnTimeout - true to force shutdown, false to leave them running
    • isShutdownNowOnTimeout

      boolean isShutdownNowOnTimeout()
      Whether to force shutdown of all consumers when a timeout occurred.
      Returns:
      force shutdown or not
    • setShutdownRoutesInReverseOrder

      void setShutdownRoutesInReverseOrder(boolean shutdownRoutesInReverseOrder)
      Sets whether routes should be shutdown in reverse or the same order as they were started.
      Parameters:
      shutdownRoutesInReverseOrder - true to shutdown in reverse order
    • isShutdownRoutesInReverseOrder

      boolean isShutdownRoutesInReverseOrder()
      Whether to shutdown routes in reverse order than they were started.

      This option is by default set to true.

      Returns:
      true if routes should be shutdown in reverse order.
    • setLogInflightExchangesOnTimeout

      void setLogInflightExchangesOnTimeout(boolean logInflightExchangesOnTimeout)
      Sets whether to log information about the inflight Exchanges which are still running during a shutdown which didn't complete without the given timeout.
      Parameters:
      logInflightExchangesOnTimeout - true to log information about the inflight exchanges, false to not log
    • isLogInflightExchangesOnTimeout

      boolean isLogInflightExchangesOnTimeout()
      Whether to log information about the inflight Exchanges which are still running during a shutdown which didn't complete without the given timeout.
    • isForceShutdown

      boolean isForceShutdown()
      Whether the shutdown strategy is forcing to shutdown
    • hasTimeoutOccurred

      boolean hasTimeoutOccurred()
      Whether a timeout has occurred during a shutdown.
    • getLoggingLevel

      LoggingLevel getLoggingLevel()
      Gets the logging level used for logging shutdown activity (such as starting and stopping routes). The default logging level is DEBUG.
    • setLoggingLevel

      void setLoggingLevel(LoggingLevel loggingLevel)
      Sets the logging level used for logging shutdown activity (such as starting and stopping routes). The default logging level is DEBUG.