Author: buildbot Date: Fri May 19 17:18:52 2017 New Revision: 1012531 Log: Production update by buildbot for camel
Modified: websites/production/camel/content/cache/main.pageCache websites/production/camel/content/routepolicy.html Modified: websites/production/camel/content/cache/main.pageCache ============================================================================== Binary files - no diff available. Modified: websites/production/camel/content/routepolicy.html ============================================================================== --- websites/production/camel/content/routepolicy.html (original) +++ websites/production/camel/content/routepolicy.html Fri May 19 17:18:52 2017 @@ -85,7 +85,7 @@ <tbody> <tr> <td valign="top" width="100%"> -<div class="wiki-content maincontent"><h2 id="RoutePolicy-RoutePolicy">RoutePolicy</h2><p><strong>Available as of Camel 2.1</strong></p><p>A route policy <code>org.apache.camel.spi.RoutePolicy</code> 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 can support any kind of use cases.</p><h3 id="RoutePolicy-Howitworks">How it works</h3><p>You associate a route with a given <code>RoutePolicy</code> and then during runtime Camel will invoke callbacks on this policy where you can implement your custom logic.</p><p>Camel provides a support class that is a good base class to extend <code>org.apache.camel.impl.RoutePolicySupport</code>.</p><p>There are these callbacks invoked</p><ul class="alternate"><li><code>onInit</code> <strong>Camel 2.3</strong></li><li><code>onRemove</code> <strong>Camel 2.9</strong></li><li><code>onStart</code> <strong>Camel 2.9</strong></li><li><code>onStop</code> <strong>C amel 2.9</strong></li><li><code>onSuspend</code> <strong>Camel 2.9</strong></li><li><code>onResume</code> <strong>Camel 2.9</strong></li><li><code>onExchangeBegin</code></li><li><code>onExchangeDone</code></li></ul><p>See the javadoc of the <code>org.apache.camel.spi.RoutePolicy</code> for more details.<br clear="none"> And also the implementation of the <code>org.apache.camel.impl.ThrottlingInflightRoutePolicy</code> for a concrete example.</p><p>Camel provides the following policies out of the box:</p><ul class="alternate"><li><code>org.apache.camel.impl.ThrottlingInflightRoutePolicy</code> - a throttling based policy that automatic suspends/resumes route(s) based on metrics from the current in flight exchanges. You can use this to dynamic throttle e.g. a <a shape="rect" href="jms.html">JMS</a> consumer to avoid it consuming too fast.</li></ul><p>As of <strong>Camel 2.5</strong>, Camel also provides an ability to schedule routes to be activated, de-activated, suspended and/or resu med at certain times during the day using a <a shape="rect" href="scheduledroutepolicy.html">ScheduledRoutePolicy</a> (offered via the <a shape="rect" class="external-link" href="http://camel.apache.org/quartz.html">camel-quartz</a> component).</p><div class="confluence-information-macro confluence-information-macro-tip"><p class="title">SuspendableService</p><span class="aui-icon aui-icon-small aui-iconfont-approve confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>If you want to dynamic suspend/resume routes as the <code>org.apache.camel.impl.ThrottlingRoutePolicy</code> does then its advised to use <code>org.apache.camel.SuspendableService</code> as it allows for fine grained <code>suspend</code> and <code>resume</code> operations. And use the <code>org.apache.camel.util.ServiceHelper</code> to aid when invoking these operations as it support fallback for regular <code>org.apache.camel.Service</code> instances.</p></div></div><h4 id="Route Policy-ThrottlingInflightRoutePolicy">ThrottlingInflightRoutePolicy</h4><p>The ThrottlingInflightRoutePolicy is triggered when an <a shape="rect" href="exchange.html">Exchange</a> is complete, which means that it requires at least one <a shape="rect" href="exchange.html">Exchange</a> to be complete before it <em>works</em>.</p><p>The throttling inflight route policy has the following options:</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Option</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Default</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>scope</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Route</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>A scope for either <code>Route</code> or <code>Context</code> which defines if the current number of inflight exchanges is context b ased or for that particular route.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>maxInflightExchanges</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>1000</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The maximum threshold when the throttling will start to suspend the route if the current number of inlfight exchanges is higher than this value.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>resumePercentOfMax</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>70</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>A percentage 0..100 which defines when the throttling should resume again in case it has been suspended.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>loggingLevel</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>INFO</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The logging level used for logging the throttling activity.</p></td></tr><tr><t d colspan="1" rowspan="1" class="confluenceTd"><p>logger</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>ThrottlingInflightRoutePolicy</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The logger category.</p></td></tr></tbody></table></div><div class="confluence-information-macro confluence-information-macro-information"><p class="title">ThrottlingInflightRoutePolicy compared to the [Throttler] EIP</p><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>The <code>ThrottlingInflightRoutePolicy</code> compared to <a shape="rect" href="throttler.html">Throttler</a> is that it does <strong>not</strong> block during throttling. It does throttling that is approximate based, meaning that its more coarse grained and not explicit precise as the <a shape="rect" href="throttler.html">Throttler</a>. The <a shape="rect" href="throttler.html">Throttler</a> can be much more accurate and only allow a specific number of messages being passed per a given time unit. Also the <code>ThrottlingInflightRoutePolicy</code> is based its metrics on number of inflight exchanges where as <a shape="rect" href="throttler.html">Throttler</a> is based on number of messages per time unit.</p></div></div><h4 id="RoutePolicy-ScheduledRoutePolicy(SimpleandCronbased)usingcamelQuartz">ScheduledRoutePolicy (Simple and Cron based) using camel Quartz</h4><p>For more details check out the following links</p><h3 id="RoutePolicy-Configuringpolicy">Configuring policy</h3><p>You configure the route policy as follows from Java DSL, using the <code>routePolicy</code> method:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +<div class="wiki-content maincontent"><h2 id="RoutePolicy-RoutePolicy">RoutePolicy</h2><p><strong>Available as of Camel 2.1</strong></p><p>A route policy <code>org.apache.camel.spi.RoutePolicy</code> 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 can support any kind of use cases.</p><h3 id="RoutePolicy-Howitworks">How it works</h3><p>You associate a route with a given <code>RoutePolicy</code> and then during runtime Camel will invoke callbacks on this policy where you can implement your custom logic.</p><p>Camel provides a support class that is a good base class to extend <code>org.apache.camel.impl.RoutePolicySupport</code>.</p><p>There are these callbacks invoked</p><ul class="alternate"><li><code>onInit</code> <strong>Camel 2.3</strong></li><li><code>onRemove</code> <strong>Camel 2.9</strong></li><li><code>onStart</code> <strong>Camel 2.9</strong></li><li><code>onStop</code> <strong>C amel 2.9</strong></li><li><code>onSuspend</code> <strong>Camel 2.9</strong></li><li><code>onResume</code> <strong>Camel 2.9</strong></li><li><code>onExchangeBegin</code></li><li><code>onExchangeDone</code></li></ul><p>See the javadoc of the <code>org.apache.camel.spi.RoutePolicy</code> for more details.<br clear="none"> And also the implementation of the <code>org.apache.camel.impl.ThrottlingInflightRoutePolicy</code> for a concrete example.</p><p>Camel provides the following policies out of the box:</p><ul class="alternate"><li><code>org.apache.camel.impl.ThrottlingInflightRoutePolicy</code> - a throttling based policy that automatic suspends/resumes route(s) based on metrics from the current in flight exchanges. You can use this to dynamic throttle e.g. a <a shape="rect" href="jms.html">JMS</a> consumer to avoid it consuming too fast.</li></ul><p>As of <strong>Camel 2.5</strong>, Camel also provides an ability to schedule routes to be activated, de-activated, suspended and/or resu med at certain times during the day using a <a shape="rect" href="scheduledroutepolicy.html">ScheduledRoutePolicy</a> (offered via the <a shape="rect" class="external-link" href="http://camel.apache.org/quartz.html">camel-quartz</a> component).</p><div class="confluence-information-macro confluence-information-macro-tip"><p class="title">SuspendableService</p><span class="aui-icon aui-icon-small aui-iconfont-approve confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>If you want to dynamic suspend/resume routes as the <code>org.apache.camel.impl.ThrottlingRoutePolicy</code> does then its advised to use <code>org.apache.camel.SuspendableService</code> as it allows for fine grained <code>suspend</code> and <code>resume</code> operations. And use the <code>org.apache.camel.util.ServiceHelper</code> to aid when invoking these operations as it support fallback for regular <code>org.apache.camel.Service</code> instances.</p></div></div><h4 id="Route Policy-ThrottlingInflightRoutePolicy">ThrottlingInflightRoutePolicy</h4><p>The ThrottlingInflightRoutePolicy is triggered when an <a shape="rect" href="exchange.html">Exchange</a> is complete, which means that it requires at least one <a shape="rect" href="exchange.html">Exchange</a> to be complete before it <em>works</em>.</p><p>The throttling inflight route policy has the following options:</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Option</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Default</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>scope</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Route</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>A scope for either <code>Route</code> or <code>Context</code> which defines if the current number of inflight exchanges is context b ased or for that particular route.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>maxInflightExchanges</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>1000</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The maximum threshold when the throttling will start to suspend the route if the current number of inflight exchanges is higher than this value.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>resumePercentOfMax</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>70</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>A percentage 0..100 which defines when the throttling should resume again in case it has been suspended.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>loggingLevel</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>INFO</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The logging level used for logging the throttling activity.</p></td></tr><tr><t d colspan="1" rowspan="1" class="confluenceTd"><p>logger</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>ThrottlingInflightRoutePolicy</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The logger category.</p></td></tr></tbody></table></div><div class="confluence-information-macro confluence-information-macro-information"><p class="title">ThrottlingInflightRoutePolicy compared to the [Throttler] EIP</p><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>The <code>ThrottlingInflightRoutePolicy</code> compared to <a shape="rect" href="throttler.html">Throttler</a> is that it does <strong>not</strong> block during throttling. It does throttling that is approximate based, meaning that its more coarse grained and not explicit precise as the <a shape="rect" href="throttler.html">Throttler</a>. The <a shape="rect" href="throttler.html">Throttler</a> can be much more accurate and only allow a specific number of messages being passed per a given time unit. Also the <code>ThrottlingInflightRoutePolicy</code> is based its metrics on number of inflight exchanges where as <a shape="rect" href="throttler.html">Throttler</a> is based on number of messages per time unit.</p></div></div><h4 id="RoutePolicy-ScheduledRoutePolicy(SimpleandCronbased)usingcamelQuartz">ScheduledRoutePolicy (Simple and Cron based) using camel Quartz</h4><p>For more details check out the following links</p><h3 id="RoutePolicy-Configuringpolicy">Configuring policy</h3><p>You configure the route policy as follows from Java DSL, using the <code>routePolicy</code> method:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> <script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ RoutePolicy myPolicy = new MyRoutePolicy(); from("seda:foo").routePolicy(myPolicy).to("mock:result"); ]]></script>