Here’s a simple groovy script to show deployed Apache Camel routes. It uses JMX to query the description of routes available.
import javax.management.*
import javax.management.remote.*
import javax.lang.management.*
def prettyPrint = { s ->
ps = ""
level = 0
for(c in s){
if(c == '['){
level++
ps += "[n".padRight(level*4," ")
} else if(c == ']'){
level--
ps += "]"
} else if(c == ','){
ps += ",n".padRight(level*4," ")
} else {
ps += c
}
}
return ps
}
def serverUrl = 'service:jmx:rmi:///jndi/rmi://localhost:1099/karaf-root'
def jmxUsername = 'smx'
def jmxPassword = 'smx'
def env = [(JMXConnector.CREDENTIALS): [jmxUsername,jmxPassword] as String[]]
def jmxUrl = new JMXServiceURL(serverUrl)
def connect = JMXConnectorFactory.connect(jmxUrl,env)
def server = connect.MBeanServerConnection
def query = new ObjectName('org.apache.camel:type=routes,*')
def routes = server.queryNames(query,null)
routes.each { route ->
def routeBean = new GroovyMBean(server,route)
printf "%250sn", prettyPrint(routeBean.Description)
}
Here’s an example of the output generated by this script:
EventDrivenConsumerRoute[
Endpoint[
activemq://topic:STOCKS.TOPIC?clientId=1&durableSubscriptionName=dsn1&selector=SE%3D%27NASDAQ%27] -> Instrumentation:route[
UnitOfWork(Pipeline[
[
Channel[
sendTo(Endpoint[
log://stocks.out?showAll=true])],
Channel[
sendTo(Endpoint[
activemq://queue:STOCKS.NASDAQ])]]])]]
EventDrivenConsumerRoute[
Endpoint[
activemq://queue:STOCKS.IN] -> Instrumentation:route[
UnitOfWork(Pipeline[
[
Channel[
sendTo(Endpoint[
log://stocks.in?showAll=true])],
Channel[
sendTo(Endpoint[
activemq://topic:STOCKS.TOPIC])]]])]]