This is an automated email from the ASF dual-hosted git repository. acosentino pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
commit 0baf58259c185c3a8a48a0e96ffed5a637ea0c8e Author: Tadayoshi Sato <sato.tadayo...@gmail.com> AuthorDate: Mon Dec 10 15:17:09 2018 +0900 CAMEL-11497: Migrate user guide - Configuring routes startup ordering and autostartup --- ...ing-route-startup-ordering-and-autostartup.adoc | 237 +++++++++++++++++++++ docs/user-manual/en/getting-started.adoc | 2 +- docs/user-manual/en/graceful-shutdown.adoc | 4 +- 3 files changed, 240 insertions(+), 3 deletions(-) diff --git a/docs/user-manual/en/configuring-route-startup-ordering-and-autostartup.adoc b/docs/user-manual/en/configuring-route-startup-ordering-and-autostartup.adoc new file mode 100644 index 0000000..b7dc5d0 --- /dev/null +++ b/docs/user-manual/en/configuring-route-startup-ordering-and-autostartup.adoc @@ -0,0 +1,237 @@ +[[Configuringroutestartuporderingandautostartup-Configuringroutesstartuporderingandautostartup]] +=== Configuring routes startup ordering and autostartup + +*Available as of Camel 2.1* + +Camel now supports configuring two aspects: + +* auto startup +* order of starting routes + +[[Configuringroutestartuporderingandautostartup-ConfiguringwhetherCamelshouldbeautostartedornotinXMLDSL]] +==== Configuring whether Camel should be auto started or not in XML DSL + +The old option `shouldStartContext` have been removed and replaced with +this new `autoStartup` option instead. What it allows is to configure +Camel to *not* auto start when Spring starts. + +For example the route below we have configured `autoStartup=false` to +prevent Camel starting when Spring starts. + +[source,xml] +---- + <camelContext id="myCamel" xmlns="http://camel.apache.org/schema/spring" autoStartup="false"> + <route> + <from uri="direct:start"/> + <to uri="mock:result"/> + </route> + </camelContext> +---- + +So how do you start Camel then? + +The `autoStartup` option on the `<camelContext>` is only used once, so you +can manually start Camel later by invoking its `start` method as shown +below: + +[source,java] +---- + ApplicationContext ac = ... + SpringCamelContext camel = (SpringCamelContext) ac.getBean("myCamel"); + + // now start Camel manually + camel.start(); +---- + +[[Configuringroutestartuporderingandautostartup-ConfiguringwhetherarouteshouldbestartedornotinXMLDSL]] +==== Configuring whether a route should be started or not in XML DSL + +You can use the `autoStartup` option to configure if a given route +should be started when Camel starts. By default a route is auto started. + +You can disable or enable it as follows. + +In XML DSL you define it as follows: + +[source,xml] +---- +<route autoStartup="false"> + <from uri="activemq:queue:special"/> + <to uri="file://backup"/> +</route> +---- + +And to explicit state it should be started: + +[source,xml] +---- +<route autoStartup="true"> + <from uri="activemq:queue:special"/> + <to uri="file://backup"/> +</route> +---- + +[[Configuringroutestartuporderingandautostartup-ConfiguringwhetherarouteshouldbestartedornotinJavaDSL]] +==== Configuring whether a route should be started or not in Java DSL + +You can use the `autoStartup` option to configure if a given route +should be started when Camel starts. By default a route is auto started. + +You can disable or enable it as follows: + +[source,java] +---- +from("activemq:queue:special").noAutoStartup().to("file://backup"); +---- + +[[Configuringroutestartuporderingandautostartup-ConfiguringwhetherarouteshouldbestartedornotusingabooleanorStringinJavaDSL]] +==== Configuring whether a route should be started or not, using a boolean or String, in Java DSL + +*Available as of Camel 2.9* + +To startup based on a boolean, String or +<<properties-component,Property>>, do one of the following: + +[source,java] +---- +boolean startupRoute = true; +from("activemq:queue:special").autoStartup(startupRoute).to("file://backup"); +... +String startupRoute = "true"; +from("activemq:queue:special").autoStartup(startupRoute).to("file://backup"); +... +from("activemq:queue:special").autoStartup("{{startupRouteProperty}}").to("file://backup"); +---- + +[[Configuringroutestartuporderingandautostartup-Configuringstartingorderforroutes]] +==== Configuring starting order for routes + +You can also configure the order in which routes are started. Previously +Camel started the routes in a non deterministic order. Now you have fine +grained control in which order the routes should be started. There is a +new attribute `startupOrder` which is an `Integer` that states the order. +Camel then sorts the routes before starting time. The routes with the +lowest `startupOrder` is started first. All `startupOrder` defined must +be unique among all routes in your +link:camelcontext.adoc[CamelContext]. + +You should also use numbers that are lower than 1000, as routes without +an explicit `startupOrder` define will have a number starting from 1000 +auto assigned. So view numbers from 1000 upwards as reserved internally +for Camel itself. + +In terms of the `startupOrder` there are no strict rules that it must +start from 1 and increment by 1. You can for example use: 100, 200, 205, +89 if you like. Only rule of thumb is that the numbers must be unique. + +[[Configuringroutestartuporderingandautostartup-Whydoyouwanttocontrolthestartingorder]] +==== Why do you want to control the starting order? + +It can help in cases where routes are inter dependent on each other and +also help with graceful shutting down Camel as Camel can stop the routes +in the correct order as well. + +[NOTE] +==== +**Stopping routes** + +*Camel 2.2:* Camel will stop the routes in the *same* order that they +were started. + +*Camel 2.3:* Camel will stop the routes in the *reverse* order that they +were started. +==== + +[[Configuringroutestartuporderingandautostartup-Examples]] +==== Examples + +Let's try a couple of examples. + +[[Configuringroutestartuporderingandautostartup-Simpleexample]] +==== Simple example + +[source,java] +---- + from("seda:foo").startupOrder(1).to("mock:result"); + from("direct:start").startupOrder(2).to("seda:foo"); +---- + +And the same example with XML DSL: + +[source,xml] +---- + <route startupOrder="1"> + <from uri="seda:foo"/> + <to uri="mock:result"/> + </route> + + <route startupOrder="2"> + <from uri="direct:start"/> + <to uri="seda:foo"/> + </route> +---- + +In this example we have two routes in which we have started that the +`direct:start` route should be started *after* the `seda:foo` route. + +As `direct:start` is consider the input and we want that `seda:foo` +route to be up and running beforehand. + +You can also mix and match routes with and without `startupOrder` +define. + +[[Configuringroutestartuporderingandautostartup-RouteswithstartupOrdermixedwithrouteswithout]] +===== Routes with startupOrder mixed with routes without + +[source,java] +---- + from("seda:foo").startupOrder(1).to("mock:result"); + from("direct:start").startupOrder(2).to("seda:foo"); + + from("direct:bar").to("seda:bar"); +---- + +And the same example with XML DSL: + +[source,xml] +---- + <route startupOrder="1"> + <from uri="seda:foo"/> + <to uri="mock:result"/> + </route> + + <route startupOrder="2"> + <from uri="direct:start"/> + <to uri="seda:foo"/> + </route> + + <route> + <from uri="direct:bar"/> + <to uri="seda:bar"/> + </route> +---- + +In the route above we have *not* define a `startupOrder` on the last +route `direct:bar` in which Camel will auto assign a number for it, in +which this case will be 1000. So therefore the route will be started +last. + +So you can use this to your advantage to only assign a `startupOrder` on +the routes which really needs it. + +[[Configuringroutestartuporderingandautostartup-Shutdown]] +==== Shutdown + +*Camel 2.2:* Camel will shutdown the routes in the *same* order that +they were started. + +*Camel 2.3:* Camel will shutdown the routes in the *reverse* order that +they were started. + +See also link:graceful-shutdown.adoc[Graceful Shutdown]. + +[[Configuringroutestartuporderingandautostartup-Seealso]] +==== See also + +* link:configuring-camel.adoc[Configuring Camel] +* link:graceful-shutdown.adoc[Graceful Shutdown] +* link:user-guide.html[User Guide] diff --git a/docs/user-manual/en/getting-started.adoc b/docs/user-manual/en/getting-started.adoc index 8a105cf..4715e4f 100644 --- a/docs/user-manual/en/getting-started.adoc +++ b/docs/user-manual/en/getting-started.adoc @@ -24,7 +24,7 @@ Working with CamelContexts and RouteBuilders To get started with Camel: 1. Create a CamelContext. -2. Optionally, link:configuring-camel.html[configure components or +2. Optionally, link:configuring-camel.adoc[configure components or endpoints]. 3. Add whatever routing rules you wish using the DSL and RouteBuilder or using diff --git a/docs/user-manual/en/graceful-shutdown.adoc b/docs/user-manual/en/graceful-shutdown.adoc index b1a3dc1..ff8c232 100644 --- a/docs/user-manual/en/graceful-shutdown.adoc +++ b/docs/user-manual/en/graceful-shutdown.adoc @@ -128,7 +128,7 @@ context.getShutdownStrategy().setLogInflightExchangesOnTimeout(false); You can configure the order in which routes should be started, and thus also the same order they are being shutdown. See more at -link:configuring-route-startup-ordering-and-autostartup.html[Configuring +link:configuring-route-startup-ordering-and-autostartup.adoc[Configuring route startup ordering and autostartup]. [[GracefulShutdown-Finegrainedconfiguration]] @@ -463,7 +463,7 @@ option. See `GenericFileConsumer` for an example. [[GracefulShutdown-SeeAlso]] ==== See Also -* link:configuring-route-startup-ordering-and-autostartup.html[Configuring +* link:configuring-route-startup-ordering-and-autostartup.adoc[Configuring route startup ordering and autostartup] * link:advanced-configuration-of-camelcontext-using-spring.html[Advanced configuration of CamelContext using Spring]