Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Wiki Markup
h2. ControlBus Component
*Available as of Camel 2.11*

The *controlbus:* component provides direct, synchronous invocation of any consumers when a producer sends a message exchange.
This endpoint can be used to connect existing routes in the *same* camel context.

{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. |
{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}

{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