...
Available as of Camel 2.1
When Camel starts (in fact CamelContext) you can configure how routes should be started
...
Camel now supports configuring two aspects:
- auto startup
- order of starting routes
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.
Code Block | ||||
---|---|---|---|---|
| ||||
<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:
Code Block |
---|
ApplicationContext ac = ...
SpringCamelContext camel = (SpringCamelContext) ac.getBean("myCamel");
// now start Camel manually
camel.start();
|
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:
Code Block |
---|
from("activemq:queue:special").noAutoStartup().to("file://backup");
|
And to explicit state it should be started
...
:
...
In XML DSL you define it as follows:
...
Code Block | ||||
---|---|---|---|---|
| ||||
<route autoStartup="true">
<from uri="activemq:queue:special"/>
<to uri="file://backup"/>
</route>
|
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:
Code Block |
---|
from("activemq:queue:special").noAutoStartup().to("file://backup");
|
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 Property, do one of the following:
Code Block |
---|
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"); |
Configuring starting order for routes
...
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.
Info | ||
---|---|---|
| ||
Camel 2.2: Camel will stop the routes in the same order in which they was that they were started. |
Examples
Lets try a couple of examples
...
Code Block |
---|
from("seda:foo").startupOrder(21).to("mock:result"); from("direct:start").startupOrder(12).to("seda:foo"); |
And the same example with XML DSL:
Code Block | ||||
---|---|---|---|---|
| ||||
<route startupOrder="21"> <from uri="seda:foo"/> <to uri="mock:result"/> </route> <route startupOrder="12"> <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 before the 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.
...
Code Block |
---|
from("seda:foo").startupOrder(21).to("mock:result"); from("direct:start").startupOrder(12).to("seda:foo"); from("direct:bar").to("seda:bar"); |
...
Code Block | ||||
---|---|---|---|---|
| ||||
<route startupOrder="21"> <from uri="seda:foo"/> <to uri="mock:result"/> </route> <route startupOrder="12"> <from uri="direct:start"/> <to uri="seda:foo"/> </route> <route> <from uri="direct:bar"/> <to uri="seda:bar"/> </route> |
...
So you can use this to your advantage to only assign a startupOrder
on the routes which really needs it.
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 Graceful Shutdown.