Camel Console
The camel-console
is available from Camel 3.15 and newer versions.
The Camel Developer Console is intended assisting developers and can display various information about a running Camel application. This is very handy during development and testing. However, the Camel Developer Console is not recommended for production use. |
Camel comes with a set of consoles out of the box from camel-console
and camel-catalog-console
JARs. These consoles can display general information about the running JVM and the OS Environment, and of course Camel related information such as runtime metrics of the Camel routes, and a lot more.
Using Camel Console
The camel-console
must be added to the classpath, and enabled either via
CamelContext context = ...
context.setDevConsole(true);
If using Camel Main / Spring Boot / Quarkus etc then the console can be enabled via configuration:
camel.main.dev-console-enabled = true
Dev Console and Camel Spring Boot
The Camel developer console is available in Spring Boot as an actuator. To enable the console you need to add dependency:
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-console-starter</artifactId>
</dependency>
To include more details such as route metrics you need to include JMX management:
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-management-starter</artifactId>
</dependency>
And finally you must enable camel
in the exposed list of HTTP actuator endpoints in application.properties
as shown:
management.endpoints.web.exposure.include=info,health,camel
The console is then available on HTTP (using default port):
http://localhost:8080/actuator/camel
This will list the available consoles, and you can then call a console by its id, such as routes
:
http://localhost:8080/actuator/camel/routes
Dev Console and Camel JBang
The Developer Console is easily available when using Camel JBang, by the --console
argument when running Camel JBang.
For example to run a Camel route from foo.yaml
and additional configurations from myapp.properties
you can run as follows and have the console started and accessible from http://localhost:8080/q/dev
$ camel run foo.yaml myapp.properties --console
Writing Custom Dev Consoles
To write a custom console, you need to add camel-console
as dependency, as it comes with the base class AbstractDevConsole
which we extend for our console.
@DevConsole("foo")
public class FooConsole extends AbstractDevConsole {
public FooConsole() {
super("acme", "foo", "Foolish", "A foolish console that outputs something");
}
@Override
protected String doCallText(Map<String, Object> options) {
StringBuilder sb = new StringBuilder();
sb.append("Hello from my custom console");
// more stuff here
return sb.toString();
}
@Override
protected JsonObject doCallJson(Map<String, Object> options) {
JsonObject root = new JsonObject();
root.put("message", "Hello from my custom console");
// more stuff here
return root;
}
}
The class must be annotated with DevConsole
and the unique id of the console (must be unique across all consoles). In the constructor the console specifies which group, id, display title, and description to use.
The doCallText
and doCallJson
methods is responsible for gathering the information the console should output.
If the console does not support either text or json output, then the methods can return null
, and override the supportMediaType
method and return true
for the media-type that are supported.
Supported Media Types
A console can support any of, or all of the following types:
-
TEXT
-
JSON
The intention for TEXT
is to be plain/text based that can be outputted in CLI and other low-level tools.
For JSON
then the intention is the console outputs a json dataset with key/value pairs that holds the information, which can be displayed in a custom fashion such as in a web browser, or IDE tool such as VSCode.
Maven Configuration
To make Camel able to discover custom dev consoles, then the came-component-maven-plugin must be used, such as:
<build>
<plugins>
<plugin>
<groupId>org.apache.camel</groupId>
<artifactId>camel-component-maven-plugin</artifactId>
<version>${camel-version}</version>
<executions>
<execution>
<id>generate</id>
<goals>
<goal>generate</goal>
</goals>
<phase>process-classes</phase>
</execution>
<execution>
<id>generate-postcompile</id>
<goals>
<goal>generate-postcompile</goal>
</goals>
<phase>prepare-package</phase>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
<goal>add-resource</goal>
</goals>
<configuration>
<sources>
<source>src/generated/java</source>
</sources>
<resources>
<resource>
<directory>src/generated/resources</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>