Why is my processor not showing up in JConsole?
Not every processor is managed, and thus not all are visible in JConsole.
A processor must implement the org.apache.camel.Service
to be managed.
Most EIP processors do this.
For example, the minor ones such as setHeader
do not and thus are not
visible in JConsole.
From Camel 2.6 onwards your custom Processor
should use the Spring
JMX annotations (for Camel 2.9 onwards see the tip box below). Just
add @ManagedResource
to the class, and the other annotations for the
attributes and operations. Then Camel will automatically use those when
the processor is being registered in JMX.
\{snippet:id=e1|lang=java|title=Custom processor|url=camel/trunk/camel-core/src/test/java/org/apache/camel/management/ManagedCustomProcessorTest.java}
The same applies when using beans in your routes.
@ManagedResource(description = "My Managed Component")
public static class MyCustomProcessor extends ServiceSupport implements Processor {
private String foo = "hey";
@ManagedAttribute
public String getFoo() {
return foo;
}
@ManagedAttribute
public void setFoo(String foo) {
this.foo = foo;
}
@Override
public void process(Exchange exchange) throws Exception {
exchange.getIn().setHeader("foo", getFoo());
}
@Override
protected void doStart() throws Exception {
// noop
}
@Override
protected void doStop() throws Exception {
// noop
}
}
Camel 2.9 onwards provides Camel’s own JMX annotations
Notice that from Camel 2.9 onwards its encouraged to use the
@ManagedResource
, @ManagedAttribute
and @ManagedOperation
from the
org.apache.camel.api.management
package. This allows your custom code
to not depend on Spring JARs anymore.