...
Available as of Camel 2.11
The The controlbus:
component provides easy management of Camel applications based on the Control Bus EIP pattern.
For example, by sending a message to an Endpoint you can control the lifecycle of routes, or gather performance statistics.
Code Block |
---|
controlbus:command[?options]
|
Where command
can be any string to identify which type of command to use.
Commands
Wiki Markup |
---|
{div:class=confluenceTableSmall}
|| Command || Description ||
| {{route}} | To control routes using the {{routeId}} and {{action}} parameter. |
| {{language}} | Allows you to specify a [Language] to use for evaluating the message body. If there is any result from the evaluation, then the result is put in the message body. |
{div} |
Options
Div | ||||||
---|---|---|---|---|---|---|
| ||||||
|
Options
Div | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||
| |||||||||||||||||
Wiki Markup | |||||||||||||||||
{div:class=confluenceTableSmall}
|| Name || Default Value || Description ||
| {{routeId}} | {{null}} | To specify a route by its {{id}}. |
| {{action}} | {{null}} | To denote an action that can be either: {{start}}, {{stop}}, or {{status}}. To either start or stop a route, or to get the status of the route as output in the message body. You can use {{suspend}} and {{resume}} from *Camel 2.11.1* onwards to either suspend or resume a route. And from *Camel 2.11.1* onwards you can use {{stats}} to get performance statics returned in XML format; the {{routeId}} option can be used to define which route to get the performance stats for, if {{routeId}} is not defined, then you get statistics for the entire [CamelContext]. |
| {{async}} | {{false}} | Whether to execute the control bus task asynchronously. *Important:* If this option is enabled, then any result from the task is *not* set on the [Exchange]. This is only possible if executing tasks synchronously. |
| {{loggingLevel}} | {{INFO}} | Logging level used for logging when task is done, or if any exceptions occurred during processing the task. |
{div} |
You can append query options to the URI in the following format, ?option=value&option=value&...
...
Examples
Using the route
...
Command
The route command allows you to do common tasks on a given route very easily, for example to start a route, you can send an empty message to this endpoint:
Code Block | ||
---|---|---|
| ||
template.sendBody("controlbus:route?routeId=foo&action=start", null);
|
To get the status of the route, you can do:
Code Block | ||
---|---|---|
| ||
String status = template.requestBody("controlbus:route?routeId=foo&action=status", null, String.class);
|
...
This requires JMX to be enabled (is by default) then you can get the performance statics per route, or for the CamelContext. For example to get the statics for a route named foo
, we can do:
Code Block |
---|
String xml = template.requestBody("controlbus:route?routeId=foo&action=stats", null, String.class);
|
The returned statics is in XML format. Its the same data you can get from JMX with the dumpRouteStatsAsXml
operation on the ManagedRouteMBean
.
To get statics for the entire CamelContext you just omit the the routeId
parameter as shown below:
Code Block |
---|
String xml = template.requestBody("controlbus:route?action=stats", null, String.class);
|
...
You can use the Simple language with the control bus, for example to stop a specific route, you can send a message to the "controlbus:language:simple
" endpoint containing the following message:
Code Block |
---|
template.sendBody("controlbus:language:simple", "${camelContext.stopRoute('myRoute')}");
|
As this is a void operation, no result is returned. However, if you want the route status you can do:
Code Block |
---|
String status = template.requestBody("controlbus:language:simple", "${camelContext.getRouteStatus('myRoute')}", String.class);
|
Notice: its easier to use the route
command to control lifecycle of routes. The language
command allows you to execute a language script that has stronger powers such as Groovy or to some extend the Simple language.
For example to shutdown Camel itself you can do:
Code Block |
---|
template.sendBody("controlbus:language:simple?async=true", "${camelContext.stop()}");
|
Notice we use async=true
to stop Camel asynchronously as otherwise we would be trying to stop Camel while it was in-flight processing the message we sent to the control bus component.
Tip |
---|
You can also use other languages such as Groovy, etc. |
Include Page | ||||
---|---|---|---|---|
|
- ControlBus EIP
- JMX Component
- Using JMX with Camel