Camel 开发者控制台
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 = trueDev 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 --consoleHTTP 访问
开发控制台端点同时接受 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>评论
登录后参与评论
KnowForge