工具

Camel 开发者控制台

师成师成· 更新于 2026-09-28· 阅读 12 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

Camel Console

camel-console 从 Camel 3.15 及更高版本开始提供。

Camel 开发者控制台(Camel Developer Console)旨在为开发者提供帮助,可以显示正在运行的 Camel 应用程序的各类信息。这在开发和测试期间非常方便。但是,不建议在生产环境中使用 Camel 开发者控制台。

Camel 开箱即用地提供了一系列控制台,来自 camel-console 和 camel-catalog-console JAR。这些控制台可以显示关于运行中的 JVM 和操作系统环境的一般信息,当然还有 Camel 相关的信息,例如 Camel 路由的运行时指标等等。

使用 Camel Console

必须将 camel-console 添加到类路径中,并通过

CamelContext context = ...
context.setDevConsole(true);

如果使用 Camel Main / Spring Boot / Quarkus 等方式,则可以通过配置启用该控制台:

camel.main.dev-console-enabled = true

Dev Console 与 Camel Spring Boot

Camel 开发者控制台在 Spring Boot 中以 actuator 的形式提供。要启用该控制台,你需要添加以下依赖:

<dependency>
    <groupId>org.apache.camel.springboot</groupId>
    <artifactId>camel-console-starter</artifactId>
</dependency>

要包含更多详细信息(如路由指标),你需要引入 JMX 管理:

<dependency>
    <groupId>org.apache.camel.springboot</groupId>
    <artifactId>camel-management-starter</artifactId>
</dependency>

最后,你必须在 application.properties 中暴露的 HTTP actuator 端点列表里启用 camel,如下所示:

management.endpoints.web.exposure.include=info,health,camel

控制台随后可通过 HTTP(使用默认端口)访问:

http://localhost:8080/actuator/camel

这将列出可用的控制台,然后你可以通过控制台的 id 来调用某个控制台,例如 routes:

http://localhost:8080/actuator/camel/routes

开发者控制台与 Camel CLI

使用 Camel CLI 时可以很方便地使用开发者控制台,只需在运行 Camel CLI 时加上 --console 参数即可。

例如,要运行 foo.yaml 中的 Camel 路由并加载 myapp.properties 中的额外配置,可以按如下方式运行,控制台将启动并可通过 http://localhost:8080/q/dev 访问:

$ camel run foo.yaml myapp.properties --console

HTTP 访问

开发控制台端点同时接受 HTTP GET 和 POST 请求。

使用 GET 时,参数通过查询参数传递:

$ curl "http://localhost:8080/q/dev/eval-language?language=simple&template=\$\{body\}&body=hello"

使用 POST 时,参数可以作为 JSON 请求体发送,从而避免 URL 长度限制,并且更适合传输复杂或较大的负载:

$ curl -X POST -H "Accept: application/json" -H "Content-Type: application/json" \
  -d '{"language":"simple","template":"${body}","body":"hello"}' \
  http://localhost:8080/q/dev/eval-language

要接收 JSON 输出,请将 Accept 请求头设置为 application/json;否则,控制台将返回纯文本。

编写自定义开发控制台

要编写自定义控制台,你需要添加 camel-console 作为依赖项,因为它提供了基类 AbstractDevConsole,我们的控制台将继承该类。

@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;
    }

}

该类必须使用 DevConsole 进行注解,并指定控制台的唯一 id(在所有控制台中必须唯一)。在构造函数中,控制台会指定要使用的分组、id、显示标题和描述。

doCallText 和 doCallJson 方法负责收集控制台应当输出的信息。

如果控制台既不支持文本输出也不支持 JSON 输出,则这些方法可以返回 null,并重写 supportMediaType 方法,对所支持的媒体类型返回 true。

支持的媒体类型

控制台可以支持以下类型中的任意一种或全部:

  • TEXT
  • JSON

TEXT 的目的是基于纯文本/plain 文本,可以在命令行界面(CLI)及其他底层工具中输出。

对于 JSON,其目的是控制台输出一个由键值对组成的数据集,其中包含相应信息,并可以以自定义的方式展示,例如在网页浏览器中,或在 IDE 工具(如 VSCode)中展示。

Maven 配置

为了使 Camel 能够发现自定义开发控制台,必须使用 camel-component-maven-plugin,例如:

<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>

评论

登录后参与评论

正在加载评论…