Camel JMX (work in progress)
Apache Camel has extensive support for JMX to allow you to monitor and control the Camel managed objects a JMX client.
Using JMX to manage Apache Camel
By default, JMX instrumentation agent is enabled in Camel which means that Camel runtime creates and registers MBean objects to a MBeanServer in the same JVM. The types of MBean objects are endpoint
, route
, service
, and processor
. The CamelNamingStrategy
is the default naming strategy which builds object names used for MBean registration. By default, org.apache.camel is the domain name for all object names created by CamelNamingStrategy. It can be configured by Java VM system property:
-Dorg.apache.camel.jmx.mbeanObjectDomainName=your.domain.name
Or, by adding a jmxAgent element inside the camelContext element in Spring configuration:
<camelContext id="camel" xmlns="http:>
<jmxAgent id="agent" mbeanObjectDomainName="your.domain.name"/>
...
</camelContext>
Spring configuration always take precedence over system properties.
Disabling JMX instrumentation agent in Camel
You can disable JMX instrumentation agent by setting Java VM system property as follow. The property value is treated as boolean.
-Dorg.apache.camel.jmx.disabled=True
Or, by adding a jmxAgent element inside the camelContext element in Spring configuration:
<camelContext id="camel" xmlns="http:>
<jmxAgent id="agent" disabled="true"/>
...
</camelContext>
Locating a MBeanServer in the Java VM
Each CamelContext can have an instance of InstrumentationAgent
wrapped insider the InstrumentationLifecycleStrategy
. The InstrumentationAgent is the object that interfaces with a MBeanServer
to register/unregister Camel MBeans. By default, Camel runtime picks the first MBeanServer returned by MBeanServerFactory.findMBeanServer method
that matches the default domain name with org.apache.camel.
You can configure the matching default domain name Java VM system property.
-Dorg.apache.camel.jmx.mbeanServerDefaultDomain=<your.domain.name>
Or, by adding a jmxAgent element inside the camelContext element in Spring configuration:
<camelContext id="camel" xmlns="http:>
<jmxAgent id="agent" mbeanServerDefaultDomain="your.domain.name"/>
...
</camelContext>
If no matching MBeanServer is located, a new one is created and the new MBeanServer's default domain name is taken as above as well.
It is also possible to pick the PlatformMBeanServer
instead by setting the system property:
-Dorg.apache.camel.jmx.usePlatformMBeanServer=True
Or, by adding a jmxAgent element inside the camelContext element in Spring configuration:
<camelContext id="camel" xmlns="http:>
<jmxAgent id="agent" usePlatformMBeanServer="true"/>
...
</camelContext>
2. Run a JMX console (e.g. jconsole - JMX console included in the JDK <JAVA_HOME>/bin/jconsole.exe)
3. Connect to the given JMX URL:
The CamelContext should appear in the list of local connections, if you are running JConsole on the same host as Camel.
To connect to a remote Camel instance, or if the local process does not show up, use Remote Process option, and enter an URL. Here is an example localhost URL:
Using the Apache Camel which Jconsole
![]()
The SystemProperties for Camel JMX support
| Property Name |
value |
Description |
| org.apache.camel.jmx |
true or false |
if is true , it will enable jmx feature in Camel |
| org.apache.camel.jmx.usePlatformMBeanServer |
true or false |
if is true, Camel JMX agent will use the platformMBeanServer which holds the JVM's memory, cpu and some other management information |
Advanced JMX Configuration
The spring configuration file allows you to configure how Camel is exposed to JMX for management. In some cases, you could specify more information here, like the connector's port or the path name.
Example:
<camelContext id="camel" useJmx="true" xmlns="http:>
<jmxAgent id="agent" connectorPort="20008" jmxDomainName="org.apache.camel.test"/>
<route>
<from uri="seda:start"/>
<to uri="mock:result"/>
</route>
</camelContext>
If you wish to change the Java 5 JMX settings you can use various JMX system properties![]()
For example you can enable remote JMX connections to the Sun JMX connector, via setting the following environment variable (using set or export depending on your platform). These settings only configure the Sun JMX connector within Java 1.5+, not the JMX connector that Camel creates by default.
SUNJMX=-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=1616 \
-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
(The SUNJMX environment variable is simple used by the startup script for Camel, as additional startup parameters for the JVM. If you start Camel directly, you'll have to pass these parameters yourself.)
jmxAgent Properties Reference
| Property Name |
Default Value |
Description |
| id |
|
The JMX agent name, and it is not optional |
| usePlatformMBeanServer |
false |
If true then it will use the plateform MBean server form the JVM |
| jmxDomainName |
org.apache.camel |
The jmx domain that all objects names will use |
| createConnector |
true |
If we should create a JMX connector (to allow remote management) for the MBeanServer |
| connectorPort |
1099 |
The port that the JMX connector will use |
| connectorPath |
/jmxrmi |
The path that JMX connector will be registered under |