Route Group

A group is an identifier for multiple routes that belong together. For example, an order integration that consists of 2 different routes can be identified by the group name "order". A route group can either be used purely as a label, or to perform tasks or monitor a whole group at once.

Examples

In the route below, we use the group name to identify two routes:

  • Java

  • XML

from("activemq:queue:order.in")
    .routeId("validate")
    .group("order")
    .to("bean:orderServer?method=validate")
    .to("direct:processOrder");

from("direct:processOrder")
    .routeId("process")
    .group("order")
    .to("bean:orderService?method=process")
    .to("activemq:queue:order.out");
<route id="validate" group="order">
 <from uri="activemq:queue:order.in"/>
 <to uri="bean:orderService?method=validate"/>
 <to uri="direct:processOrder"/>
</route>

<route id="process" group="order">
 <from uri="direct:processOrder"/>
 <to uri="bean:orderService?method=process"/>
 <to uri="activemq:queue:order.out"/>
</route>

Creating a route from a route template

It’s also possible to call a route template and add the created route to a group.

  • Java

  • XML

templatedRoute("myTemplate")
        .group("greetings")
        .parameter("name", "one")
        .parameter("greeting", "Hello");
templatedRoute("myTemplate")
        .group("greetings")
        .parameter("name", "two")
        .parameter("greeting", "Bonjour")
        .parameter("myPeriod", "5s");
<templatedRoutes xmlns="http://camel.apache.org/schema/spring">
  <templatedRoute routeTemplateRef="myTemplate" group="greetings">
    <parameter name="name" value="one"/>
    <parameter name="greeting" value="Hello"/>
  </templatedRoute>
  <templatedRoute routeTemplateRef="myTemplate" group="greetings">
    <parameter name="name" value="two"/>
    <parameter name="greeting" value="Bonjour"/>
    <parameter name="myPeriod" value="5s"/>
  </templatedRoute>
</templatedRoutes>

Performing Tasks

The camel API allows to retrieve all routes of a group and then perform various tasks.

Here is an example to suspend all routes of a group:

List<Route> routes = context.getRoutesByGroup("order");

for (Route route : routes) {
    System.out.println("Suspend routeId=" + route.getId() + " for group=" + route.getGroup());
    route.getRouteController().suspendRoute(route.getId());
}

Monitoring

Camel has optional support for JMX management. This includes management of groups.

To get all failed changes for a group:

ManagedCamelContext managedContext = context.getCamelContextExtension().getContextPlugin(ManagedCamelContext.class);
ManagedRouteGroupMBean managedRouteGroup = managedContext.getManagedRouteGroup("order");

if(managedRouteGroup!=null){
    System.out.println("Group order has " + managedRouteGroup.getExchangesFailed() + " failed exchanges");
}

To get all failed changes for every route in a group:

ManagedCamelContext managedContext = context.getCamelContextExtension().getContextPlugin(ManagedCamelContext.class);

List<ManagedRouteMBean> routes = managedContext.getManagedRoutesByGroup(flowId);

for (ManagedRouteMBean route : routes) {
	System.out.println("RouteId=" + route.getRouteId() + " has " + route.getExchangesFailed() + " failed exchanges");
}