Available as of Camel 2.1
A route policy org.apache.camel.spi.RoutePolicy is used to control route(s) at runtime. For example you can use it to determine whether a route should be running or not. However the policies is can support any kind of use cases.
You associate a route with a given RoutePolicy and then during runtime Camel will invoke callbacks on this policy where you can implement your custom logic.
Camel provides a support class that is a good base class to extend org.apache.camel.impl.RoutePolicySupport.
There are two callbacks invoked
See the javadoc of the org.apache.camel.spi.RoutePolicy for more details.
And also the implementation of the org.apache.camel.impl.ThrottlingRoutePolicy for a concrete example.
Camel provides the following policies out of the box:
If you want to dynamic suspend/resume routes as the org.apache.camel.impl.ThrottlingRoutePolicy does then its advised to use org.apache.camel.SuspendableService as it allows for fine grained suspend and resume operations. And use the org.apache.camel.util.ServiceHelper to aid when invoking these operations as it support fallback for regular org.apache.camel.Service instances.
The throttling route policy has the following options:
|scope||Route||A scope for either Route or Context which defines if the current number of inflight exchanges is context based or for that particular route.|
|maxInflightExchanges||1000||The maximum threshold when the throttling will start to suspend the route if the current number of inlfight exchanges is higher than this value.|
|resumePercentOfMax||70||A percentage 0..100 which defines when the throttling should resume again in case it has been suspended.|
|loggingLevel||INFO||The logging level used for logging the throttling activity.|
|logger||ThrottlingRoutePolicy||The logger category.|
You configure the route policy as follows from Java DSL, using the routePolicy method:
In Spring XML its a bit different as follows using the routePolicyRef attribute: