THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
Wiki Markup |
---|
h2. ControlBus Component *Available as of Camel 2.11* The *controlbus:* component provides easy management of Camel applications based on the [Control Bus|ControlBus] EIP pattern. For example by sending a message to an [Endpoint] you can control the lifecycle of routes, or gather performance statistics. {code} controlbus:command[?options] {code} Where *command* can be any string to identify which type of command to use. h3. Commands {div:class=confluenceTableSmall} || Command || Description || | {{route}} | To control routes using the {{routeId}} and {{action}} parameter. | | {{language}} | Allows to specify a [Language] to use for evaluating the message body. If there is any result from the evaluation, then the result is put on the message body. | {div} h3. Options {div:class=confluenceTableSmall} || Name || Default Value || Description || | {{routeId}} | {{null}} | To specify a route by its id. | | {{action}} | {{null}} | To denote an action which can be either: {{start}}, {{stop}}, or {{status}}. To either start or stop a route. Og get the status of the route as output to the message body. | | {{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&...}} h3. Samples h4. Using route command The route command allows to do common tasks on a given route very easily, for example to start a route you can send a empty message to this endpoint: {code} template.sendBody("controlbus:route?routeId=foo&action=start", null); {code} To get the status of the route you can do: {code} String status = template.requestBody("controlbus:route?routeId=foo&action=status", null, String.class); {code} h4. Using [Simple] language You can use [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} template.sendBody("controlbus:language:simple", "${camelContext.stopRoute('myRoute')}"); {code} As this operation is a void operation, then no result is returned. However if you want the route status you can do: {code} String status = template.requestBody("controlbus:language:simple", "${camelContext.getRouteStatus('myRoute')}", String.class); {code} *Notice:* its easier to use the {{route}} command to controcontrol lifecycle of routes. Though the {{language}} command allows to execute a language script which has stronger powers such as [Groovy] or to some extend the [Simple] language. For example to shutdown Camel itself you can do: {code} template.sendBody("controlbus:language:simple?async=true", "${camelContext.stop()}"); {code} 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. {tip} {include:Endpoint See Also} - [ControlBus] EIP - [JMX] Component - Using [JMX|Camel JMX] with Camel |