Hi Cameleers,
I'm wondering what the best way is to manage and monitor a group of routes
as an integration ('a unit of work')?
Through the mailing list, I try to gather some ideas on this topic.
Background: Integration vs Routes
Say I have three routes that together form my integration:
<routes id="myRoutesGroup" xmlns="http://camel.apache.org/schema/spring">
<route id="myRoutesGroup-1">
<from uri="quartz:foo?cron={{myCron}}"/>
<log message="Start"/>
<to uri="direct:myRoutesGroup-2"/>
</route>
<route id="myRoutesGroup-2">
<from uri="direct:myRoutesGroup-2"/>
<log message="In the middle"/>
<to uri="direct:myRoutesGroup-3"/>
</route>
<route id="myRoutesGroup-3">
<from uri="direct:myRoutesGroup-3"/>
<log message="Finished"/>
</route>
</routes>
So, the work processing messages is split up into three routes, but from a
high-level view it's just one integration.
>From a Camel point of view the order doesn't matter, so I can create the
same routes also like this:
<routes id="myRoutesGroup" xmlns="http://camel.apache.org/schema/spring">
<route id="myRoutesGroup-3">
<from uri="direct:myRoutesGroup-3"/>
<log message="Finished"/>
</route>
<route id="myRoutesGroup-2">
<from uri="direct:myRoutesGroup-2"/>
<log message="In the middle"/>
<to uri="direct:myRoutesGroup-3"/>
</route>
<route id="myRoutesGroup-1">
<from uri="quartz:foo?cron={{myCron}}"/>
<log message="Start"/>
<to uri="direct:myRoutesGroup-2"/>
</route>
</routes>
Because the order doesn't matter for Camel the integration still works the
same.
So messages start at the quartz component and then flow through the others
routes.
What I am trying to achieve:
I was wondering how to manage and monitoring such integrations (route
groups) at once. Here is some pseudo-code how I imagine it:
RoutesGroup myRoutesGroup = context.getRouteGroup("myRoutesGroup");
myRoutesGroup.suspend(); //suspends all routes in a group
myRoutesGroup.start(); //starts all routes in a group
myRoutesGroup.stop(); //stops all routes in a group
myRoutesGroup.status(); //get the status from group
Besides managing the integration I also like to monitor it as a group. For
example to get:
1. Number or Content of messages processed by a group (in and out messages)
2. Number or Content of messages processed by a single route in the group
(in and out message).
With the second, I mean messages on a route level. What message goes into a
route and what messages go out. This in contrast to exchanges, because
exchanges create events on a lower level. In this example I am using direct
component, so that would create the following exchange events:
1. First route: ExchangeCreated, some ExchangeSending/ExchangeSent events
2. Second route: Only sending/sent events
3. Third route: Sending/sent events and the completed event.
>From an integration point of view, I am only interested in what goes in and
out the integration and how many messages that are. Or I am interested
what messages are going into and out a single route (as a processing step).
Is there a way to work with integrations opposed to routes? What are the
possibilities in Camel?
Raymond