7.3. 创建并运行 Camel 路由
您可以使用 init 命令创建新的基本路由。例如,要创建 XML 路由,请运行以下命令:
camel init cheese.xml
camel init cheese.xml
这会使用示例路由创建文件 cheese.xml (当前目录中)。
要运行该文件,请运行:
camel run --camel-version=4.8.3.redhat-00004 cheese.xml
camel run --camel-version=4.8.3.redhat-00004 cheese.xml
您可以在 Camel 中创建并运行任何支持的 DSL,如 YAML、XML、Java、Groovy。
要创建新的 .java 路由,请运行:
camel init foo.java
camel init foo.java
当您使用 init 命令时,Camel 默认会在当前目录中创建该文件。但是,您可以使用 a-directory 选项在指定目录中创建该文件。例如,要在名为 foobar 的文件夹中创建,请运行:
camel init foo.java --directory=foobar
camel init foo.java --directory=foobar
当您使用-- directory 选项时,Camel 会自动清理此目录(如果已存在)。
7.3.1. 从多个文件运行路由 复制链接链接已复制到粘贴板!
您可以从多个文件运行路由,例如运行两个 YAML 文件:
camel run --camel-version=4.8.3.redhat-00004 one.yaml two.yaml
camel run --camel-version=4.8.3.redhat-00004 one.yaml two.yaml
您可以从两个不同的文件(如 yaml 和 Java)运行路由:
camel run --camel-version=4.8.3.redhat-00004 one.yaml hello.java
camel run --camel-version=4.8.3.redhat-00004 one.yaml hello.java
您可以使用通配符(如 )匹配多个文件,如运行所有 yaml 文件:
camel run --camel-version=4.8.3.redhat-00004 *.yaml
camel run --camel-version=4.8.3.redhat-00004 *.yaml
您可以运行以 foo* 开始的所有文件:
camel run --camel-version=4.8.3.redhat-00004 foo*
camel run --camel-version=4.8.3.redhat-00004 foo*
要运行目录中的所有文件,请使用:
camel run --camel-version=4.8.3.redhat-00004 *
camel run --camel-version=4.8.3.redhat-00004 *
run 目标还可检测 属性 为 的文件,如 application.properties。
7.3.2. 从输入参数运行路由 复制链接链接已复制到粘贴板!
对于非常小的 Java 路由,可以将路由作为 CLI 参数提供,如下所示:
camel run --code='from("kamelet:beer-source").to("log:beer")'
camel run --code='from("kamelet:beer-source").to("log:beer")'
这非常有限,因为 CLI 参数比文件非常繁琐。当您从输入参数运行路由时,请记住:
- 仅支持 Java DSL 代码。
- 代码用单引号括起,因此您可以在 Java DSL 中使用双引号。
- 代码仅限于可以从终端和 JBang 提供的字面值。
-
所有路由都必须在单
代码参数中定义。
使用-code 仅适用于非常快速、小的原型。
7.3.3. 带有实时重新加载的 dev 模式 复制链接链接已复制到粘贴板!
您可以使用 --dev 选项启用在源文件更新(保存)时实时重新载入路由的 dev 模式,如下所示:
camel run foo.yaml --dev
camel run foo.yaml --dev
然后,在 Camel 集成运行时,您可以在保存时更新 YAML 路由和更新。此选项适用于所有 DLS,包括 java,例如:
camel run hello.java --dev
camel run hello.java --dev
live reload 选项仅用于开发目的,如果您遇到重新加载 JVM 类加载问题(如 JVM 类加载问题),则可能需要重新启动集成。
7.3.4. 开发人员控制台 复制链接链接已复制到粘贴板!
您可以启用开发人员控制台,控制台为开发人员提供各种信息。要启用开发人员控制台,请运行:
camel run hello.java --console
camel run hello.java --console
然后,可从位于 http://localhost:8080/q/dev 的 Web 浏览器访问控制台(默认情况下)。当 Camel 启动时,该链接也会在日志中显示。
控制台可让您深入了解正在运行的 Camel 集成,如报告处理消息最多时间的顶级路由。然后您可以在这些路由中识别最慢的独立 EIP。
开发人员控制台也可以以 JSON 格式输出数据,供第三方工具用于捕获信息。例如,要通过 curl 输出 top 路由,请运行:
curl -s -H "Accept: application/json" http://0.0.0.0:8080/q/dev/top/
curl -s -H "Accept: application/json" http://0.0.0.0:8080/q/dev/top/
如果您安装了 jq,可以格式化并输出 JSON 数据,请运行:
curl -s -H "Accept: application/json" http://0.0.0.0:8080/q/dev/top/ | jq
curl -s -H "Accept: application/json" http://0.0.0.0:8080/q/dev/top/ | jq
7.3.5. 使用配置集 复制链接链接已复制到粘贴板!
Camel CLI 中的 配置集 是一个名称(id),它引用使用 Camel CLI 自动载入的配置。默认配置集被命名为 application,它是一个 (智能默认)来让 Camel CLI 自动加载 application.properties (如果存在)。这意味着您可以创建与名称相同的特定属性文件匹配的配置集。
例如,使用名为 local 的配置集运行 意味着 Camel CLI 将加载 local.properties 而不是 application.properties。要使用配置集,请指定命令行选项-- profile,如下所示:
camel run hello.java --profile=local
camel run hello.java --profile=local
您只能一次指定一个配置集名称,如-- profile=local,two 无效。
在 属性文件中,您可以配置来自 Camel 主的所有配置。要关闭并启用日志掩码,请运行以下命令:
camel.main.streamCaching=false camel.main.logMask=true
camel.main.streamCaching=false
camel.main.logMask=true
您还可以配置 Camel 组件,如 camel-kafka,为代理声明 URL:
camel.component.kafka.brokers=broker1:9092,broker2:9092,broker3:9092
camel.component.kafka.brokers=broker1:9092,broker2:9092,broker3:9092
以 camel.jbang 开头的键是 Camel CLI 内部使用的保留键,并允许 Camel CLI 命令预配置参数。
7.3.6. 通过互联网下载 JAR 复制链接链接已复制到粘贴板!
默认情况下,Camel CLI 会自动解析运行 Camel 所需的依赖项,这由 JBang 和 Camel 分别完成。如果组件需要在类路径上当前不可用的 JAR 需要,则 Camel 本身会在运行时检测到,然后可以自动下载 JAR。
Camel 按照以下顺序下载这些 JAR:
-
来自
~/.m2/repository中的本地磁盘 - 从 Maven Central 中的互联网
- 从自定义第三方 Maven 存储库中的互联网
-
从
~/.m2/settings.xml活跃的配置集中找到的所有软件仓库,或使用--maven-settings 选项指定的设置文件。
如果您不希望 Camel CLI 通过互联网下载,您可以使用-- download 选项关闭此选项,如下所示:
camel run foo.java --download=false
camel run foo.java --download=false
7.3.7. 添加自定义 JAR 复制链接链接已复制到粘贴板!
Camel CLI 会自动检测其自身发行版本中 Camel 组件、语言和数据格式的依赖项。这意味着不需要指定要使用的 JAR。但是,如果您需要添加第三方自定义 JAR,您可以在 Maven GAV 语法(groupId:artifactId:version)中使用-- dep 指定为 CLI 参数,例如:
camel run foo.java --dep=com.foo:acme:1.0
camel run foo.java --dep=com.foo:acme:1.0
To add a Camel dependency explicitly you can use a shorthand syntax (starting with `camel:` or `camel-`):
To add a Camel dependency explicitly you can use a shorthand syntax (starting with `camel:` or `camel-`):
camel run foo.java --dep=camel-saxon
camel run foo.java --dep=camel-saxon
您可以指定用逗号分开的多个依赖项:
camel run foo.java --dep=camel-saxon,com.foo:acme:1.0
camel run foo.java --dep=camel-saxon,com.foo:acme:1.0
7.3.8. 使用第三方 Maven 存储库 复制链接链接已复制到粘贴板!
首先从本地存储库下载 Camel CLI,然后从在线 Maven Central 存储库下载。要从第三方 Maven 存储库下载,您必须将此选项指定为 CLI 参数,或者在 application.properties 文件中。
camel run foo.java --repos=https://packages.atlassian.com/maven-external
camel run foo.java --repos=https://packages.atlassian.com/maven-external
您可以指定用逗号分开的多个软件仓库。
第三方 Maven 存储库的配置在 application.properties 文件中配置,其键为 camel.jbang.repos,如下所示:
camel.jbang.repos=https://packages.atlassian.com/maven-external
camel.jbang.repos=https://packages.atlassian.com/maven-external
运行 Camel 路由时,application.properties 会自动载入:
camel run foo.java
camel run foo.java
您还可以显式指定要使用的属性文件:
camel run foo.java application.properties
camel run foo.java application.properties
或者您可以将它指定为配置集:
camel run foo.java --profile=application
camel run foo.java --profile=application
其中配置文件 id 是属性文件的名称。
7.3.9. 配置 Maven 用法 复制链接链接已复制到粘贴板!
默认情况下,会加载现有的 ~/.m2/settings.xml 文件,因此可以更改 Maven 解析过程的行为。Maven 设置文件提供有关 Maven 镜像、凭证配置(可能加密)或活跃配置集和其他存储库的信息。
Maven 存储库可以使用身份验证,Maven-way 来配置凭证是通过 < server> 元素:
<server>
<id>external-repository</id>
<username>camel</username>
<password>{SSVqy/PexxQHvubrWhdguYuG7HnTvHlaNr6g3dJn7nk=}</password>
</server>
<server>
<id>external-repository</id>
<username>camel</username>
<password>{SSVqy/PexxQHvubrWhdguYuG7HnTvHlaNr6g3dJn7nk=}</password>
</server>
虽然可以使用纯文本指定密码,但我们建议您首先配置 maven master 密码,然后使用它来配置存储库密码:
mvn -emp
$ mvn -emp
Master password: camel
{hqXUuec2RowH8dA8vdqkF6jn4NU9ybOsDjuTmWvYj4U=}
以上密码必须添加到 ~/.m2/settings-security.xml 文件中,如下所示:
<settingsSecurity>
<master>{hqXUuec2RowH8dA8vdqkF6jn4NU9ybOsDjuTmWvYj4U=}</master>
</settingsSecurity>
<settingsSecurity>
<master>{hqXUuec2RowH8dA8vdqkF6jn4NU9ybOsDjuTmWvYj4U=}</master>
</settingsSecurity>
然后您可以配置常规密码:
mvn -ep
$ mvn -ep
Password: camel
{SSVqy/PexxQHvubrWhdguYuG7HnTvHlaNr6g3dJn7nk=}
然后您可以在 < server>/<password> 配置中使用 这个密码。
默认情况下,Maven 从 ~/.m2/settings-security.xml 文件中读取 master 密码,但您可以覆盖它。settings.xml 文件本身的位置可以指定,如下所示:
camel run foo.java --maven-settings=/path/to/settings.xml --maven-settings-security=/path/to/settings-security.xml
camel run foo.java --maven-settings=/path/to/settings.xml --maven-settings-security=/path/to/settings-security.xml
如果要在不假定任何位置(即使 ~/.m2/settings.xml)的情况下运行 Camel 应用程序,请使用这个选项:
camel run foo.java --maven-settings=false
camel run foo.java --maven-settings=false
7.3.10. 运行托管在 GitHub 上的路由 复制链接链接已复制到粘贴板!
您可以使用 Camels 资源加载程序运行托管在 GitHub 上的路由。例如,要运行 Camel K 示例之一,请使用:
camel run github:apache:camel-kamelets-examples:jbang/hello-java/Hey.java
camel run github:apache:camel-kamelets-examples:jbang/hello-java/Hey.java
您还可以将 https URL 用于 GitHub。例如,您可以从 web-browser 中浏览示例,然后从浏览器窗口中复制 URL,并使用 Camel CLI 运行示例:
camel run https://github.com/apache/camel-kamelets-examples/tree/main/jbang/hello-java
camel run https://github.com/apache/camel-kamelets-examples/tree/main/jbang/hello-java
您还可以使用通配符(即 \ *)匹配多个文件,比如运行所有 groovy 文件:
camel run https://github.com/apache/camel-kamelets-examples/tree/main/jbang/languages/*.groovy
camel run https://github.com/apache/camel-kamelets-examples/tree/main/jbang/languages/*.groovy
或者,您可以运行以 rou* 开始的所有文件:
camel run https://github.com/apache/camel-kamelets-examples/tree/main/jbang/languages/rou*
camel run https://github.com/apache/camel-kamelets-examples/tree/main/jbang/languages/rou*
7.3.10.1. 从 GitHub gists 运行路由 复制链接链接已复制到粘贴板!
使用 GitHub 中的 gists 是共享可轻松运行的小型 Camel 路由的一种快速方法。例如,要运行 gist,请使用:
camel run https://gist.github.com/davsclaus/477ddff5cdeb1ae03619aa544ce47e92
camel run https://gist.github.com/davsclaus/477ddff5cdeb1ae03619aa544ce47e92
gist 可以包含一个或多个文件,Camel CLI 将收集所有相关文件,因此 gist 可以包含多个路由、属性文件和 Java Bean。
7.3.11. 下载托管在 GitHub 的路由 复制链接链接已复制到粘贴板!
您可以使用 Camel CLI 将现有示例从 GitHub 下载到本地磁盘,允许修改示例并在本地运行。例如,您可以运行以下命令来下载 依赖项注入 示例:
camel init https://github.com/apache/camel-kamelets-examples/tree/main/jbang/dependency-injection
camel init https://github.com/apache/camel-kamelets-examples/tree/main/jbang/dependency-injection
然后,文件(而不是子文件夹)下载到当前目录中。然后您可以使用以下内容在本地运行示例:
camel run *
camel run *
您还可以使用-- directory 选项将文件下载到新文件夹,例如要将文件下载到名为 myproject 的文件夹,请运行:
camel init https://github.com/apache/camel-kamelets-examples/tree/main/jbang/dependency-injection --directory=myproject
camel init https://github.com/apache/camel-kamelets-examples/tree/main/jbang/dependency-injection --directory=myproject
使用- 目录 选项时,如果已存在,Camel 会自动清理此目录。
您可以在 dev 模式下运行示例,以便对源代码更改进行热部署。
camel run * --dev
camel run * --dev
您可以下载单个文件,例如下载一个 Camel K 示例,请运行:
camel init https://github.com/apache/camel-k-examples/blob/main/generic-examples/languages/simple.groovy
camel init https://github.com/apache/camel-k-examples/blob/main/generic-examples/languages/simple.groovy
这是一个 groovy 路由,您可以使用 (或使用 *)运行:
camel run simple.groovy
camel run simple.groovy
7.3.11.1. 下载路由表单 GitHub gists 复制链接链接已复制到粘贴板!
您可以从 gists 下载文件,如下所示:
camel init https://gist.github.com/davsclaus/477ddff5cdeb1ae03619aa544ce47e92
camel init https://gist.github.com/davsclaus/477ddff5cdeb1ae03619aa544ce47e92
这会将文件下载到本地磁盘,您可以在随后运行:
camel run *
camel run *
您可以使用 the- directory 选项下载到新文件夹,例如,要下载到名为 foobar 的文件夹,请运行:
camel init https://gist.github.com/davsclaus/477ddff5cdeb1ae03619aa544ce47e92 --directory=foobar
camel init https://gist.github.com/davsclaus/477ddff5cdeb1ae03619aa544ce47e92 --directory=foobar
使用- 目录 选项时,如果已存在,Camel 会自动清理此目录。
7.3.12. 运行 Camel K 集成或绑定 复制链接链接已复制到粘贴板!
Camel 支持运行 Camel K 集成和绑定文件,这些文件采用 CRD 格式(Kubernetes 自定义资源定义)。例如,运行名为 joke.yaml 的 kamelet 绑定文件:
camel run joke.yaml
camel run joke.yaml
7.3.13. 从剪贴板运行 复制链接链接已复制到粘贴板!
您可以直接从 OS clipboard 运行 Camel 路由。这允许复制一些代码,然后快速运行路由。
camel run clipboard.<extension>
camel run clipboard.<extension>
其中 <extension>,剪贴板的内容类型是 java、xml 或 yaml。
例如,您可以将它复制到剪贴板中,然后运行路由:
<route> <from uri="timer:foo"/> <log message="Hello World"/> </route>
<route>
<from uri="timer:foo"/>
<log message="Hello World"/>
</route>
camel run clipboard.xml
camel run clipboard.xml
7.3.14. 控制本地 Camel 集成 复制链接链接已复制到粘贴板!
要列出当前运行的 Camel 集成,请使用 ps 选项:
camel ps PID NAME READY STATUS AGE 61818 sample.camel.MyCamelApplica… 1/1 Running 26m38s 62506 test1 1/1 Running 4m34s
camel ps
PID NAME READY STATUS AGE
61818 sample.camel.MyCamelApplica… 1/1 Running 26m38s
62506 test1 1/1 Running 4m34s
这将列出集成的 PID、名称和年龄。
您可以使用 stop 命令停止任何正在运行的 Camel 集成。例如,要停止 test1,请运行:
camel stop test1 Stopping running Camel integration (pid: 62506)
camel stop test1
Stopping running Camel integration (pid: 62506)
您可以使用 PID 停止集成:
camel stop 62506 Stopping running Camel integration (pid: 62506)
camel stop 62506
Stopping running Camel integration (pid: 62506)
您不必输入全名,因为 stop 命令将与以输入开头的集成匹配,例如键入 camel stop t 来停止以 t 开始的所有集成。
要停止所有集成,请使用-- all 选项,如下所示:
camel stop --all Stopping running Camel integration (pid: 61818) Stopping running Camel integration (pid: 62506)
camel stop --all
Stopping running Camel integration (pid: 61818)
Stopping running Camel integration (pid: 62506)
7.3.15. 控制 Spring Boot 和 Quarkus 集成 复制链接链接已复制到粘贴板!
默认情况下,Camel CLI 仅控制使用 CLI 运行的 Camel 集成,如 camel run foo.java。
要使 CLI 能够控制和管理 Spring Boot 或 Quarkus 应用程序,您需要将依赖项添加到这些项目,以便与 Camel CLI 集成。
Spring Boot
在 Spring Boot 应用程序中,添加以下依赖项:
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-cli-connector-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-cli-connector-starter</artifactId>
</dependency>
Quarkus
在 Quarkus 应用程序中,添加以下依赖项:
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-cli-connector</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-cli-connector</artifactId>
</dependency>
7.3.16. 获取 Camel 集成状态 复制链接链接已复制到粘贴板!
Camel CLI 中的 get 命令用于为一个或多个正在运行的 Camel 集成获取 Camel 特定状态。要显示正在运行的 Camel 集成的状态,请运行:
camel get PID NAME CAMEL PLATFORM READY STATUS AGE TOTAL FAILED INFLIGHT SINCE-LAST 61818 MyCamel 4.8.0-SNAPSHOT Spring Boot v2.7.3 1/1 Running 28m34s 854 0 0 0s/0s/- 63051 test1 4.8.0-SNAPSHOT JBang 1/1 Running 18s 14 0 0 0s/0s/- 63068 mygroovy 4.8.0-SNAPSHOT JBang 1/1 Running 5s 2 0 0 0s/0s/-
camel get
PID NAME CAMEL PLATFORM READY STATUS AGE TOTAL FAILED INFLIGHT SINCE-LAST
61818 MyCamel 4.8.0-SNAPSHOT Spring Boot v2.7.3 1/1 Running 28m34s 854 0 0 0s/0s/-
63051 test1 4.8.0-SNAPSHOT JBang 1/1 Running 18s 14 0 0 0s/0s/-
63068 mygroovy 4.8.0-SNAPSHOT JBang 1/1 Running 5s 2 0 0 0s/0s/-
camel get 命令显示默认的集成,它等同于输入 camel get integrations 或 camel get int 命令。
这将显示每个 Camel 集成的整体信息,您可以在其中查看处理的消息总数。列 Since Last 显示在三个阶段的最后处理消息(启动/完成/失败)的时长。
值 0s/0s/- 表示刚刚发生最后一次启动和完成的消息(0 秒前),并且尚未显示任何失败消息。在这个示例中,9s/9s/1h3m 表示最近启动和完成的消息为 9 秒前,最后失败为 1 小时,3 分钟以前。
您还可以从所有本地 Camel 集成查看每个路由的状态,以及 camel get route :
camel get route PID NAME ID FROM STATUS AGE TOTAL FAILED INFLIGHT MEAN MIN MAX SINCE-LAST 61818 MyCamel hello timer://hello?period=2000 Running 29m2s 870 0 0 0 0 14 0s/0s/- 63051 test1 java timer://java?period=1000 Running 46s 46 0 0 0 0 9 0s/0s/- 63068 mygroovy groovy timer://groovy?period=1000 Running 34s 34 0 0 0 0 5 0s/0s/-
camel get route
PID NAME ID FROM STATUS AGE TOTAL FAILED INFLIGHT MEAN MIN MAX SINCE-LAST
61818 MyCamel hello timer://hello?period=2000 Running 29m2s 870 0 0 0 0 14 0s/0s/-
63051 test1 java timer://java?period=1000 Running 46s 46 0 0 0 0 9 0s/0s/-
63068 mygroovy groovy timer://groovy?period=1000 Running 34s 34 0 0 0 0 5 0s/0s/-
使用 camel get --help 显示所有可用的命令。
7.3.16.1. Camel 集成的主要状态 复制链接链接已复制到粘贴板!
camel top 命令用于获取正在运行的 Camel 集成的最高利用率统计(最高到最低堆使用的内存)。
camel top PID NAME JAVA CAMEL PLATFORM STATUS AGE HEAP NON-HEAP GC THREADS CLASSES 22104 chuck 11.0.13 4.8.0-SNAPSHOT JBang Running 2m10s 131/322/4294 MB 70/73 MB 17ms (6) 7/8 7456/7456 14242 MyCamel 11.0.13 4.8.0-SNAPSHOT Spring Boot v2.7.3 Running 33m40s 115/332/4294 MB 62/66 MB 37ms (6) 16/16 8428/8428 22116 bar 11.0.13 4.8.0-SNAPSHOT JBang Running 2m7s 33/268/4294 MB 54/58 MB 20ms (4) 7/8 6104/6104
camel top
PID NAME JAVA CAMEL PLATFORM STATUS AGE HEAP NON-HEAP GC THREADS CLASSES
22104 chuck 11.0.13 4.8.0-SNAPSHOT JBang Running 2m10s 131/322/4294 MB 70/73 MB 17ms (6) 7/8 7456/7456
14242 MyCamel 11.0.13 4.8.0-SNAPSHOT Spring Boot v2.7.3 Running 33m40s 115/332/4294 MB 62/66 MB 37ms (6) 16/16 8428/8428
22116 bar 11.0.13 4.8.0-SNAPSHOT JBang Running 2m7s 33/268/4294 MB 54/58 MB 20ms (4) 7/8 6104/6104
HEAP 列显示堆内存(used/committed/max)和非堆(used/committed)。GC 列显示垃圾回收信息(时间和总计运行)。CLASSES 列显示类数(loaded/total)。
您还可以从所有本地 Camel 与 camel 顶级路由集成,查看每个路由的顶部执行路由(最高到最低平均处理时间 ):
使用 camel top --help 显示所有可用的命令。
7.3.16.2. 启动和停止路由 复制链接链接已复制到粘贴板!
camel cmd 用于在正在运行的 Camel 集成中执行各种命令,例如,用于启动和停止路由的命令。
要停止 chuck 集成中的所有路由,请运行:
camel cmd stop-route chuck
camel cmd stop-route chuck
然后,对于 chuck 集成,状态将变为 Stopped :
要启动路由,请运行:
camel cmd start-route chuck
camel cmd start-route chuck
要停止每个 Camel 集成中的所有路由,请使用-- 标志,如下所示:
all
camel cmd stop-route --all
camel cmd stop-route --all
要启动 所有路由,请使用:
camel cmd start-route --all
camel cmd start-route --all
您可以使用逗号分隔一个或多个路由来停止一个或多个路由,例如 camel cmd start-route --id=route1,hello。如需更多详细信息,请使用 camel cmd start-route --help 命令。
7.3.16.3. 配置日志记录级别 复制链接链接已复制到粘贴板!
您可以通过以下方法查看正在运行的 Camel 集成的当前日志记录级别:
camel cmd logger PID NAME AGE LOGGER LEVEL 90857 bar 2m48s root INFO 91103 foo 20s root INFO
camel cmd logger
PID NAME AGE LOGGER LEVEL
90857 bar 2m48s root INFO
91103 foo 20s root INFO
日志级别可以在运行时更改。例如,要将 foo 的级别更改为 DEBUG,请运行:
camel cmd logger --level=DEBUG foo
camel cmd logger --level=DEBUG foo
您可以使用- -all 更改所有正在运行的集成的日志级别。
7.3.16.4. 列出服务 复制链接链接已复制到粘贴板!
有些 Camel 集成可能会托管客户端可以调用的服务,如 REST 或 SOAP-WS,或使用 TCP 协议进行套接字级服务。您可以列出可用服务,如下例所示:
camel get service
PID NAME COMPONENT PROTOCOL SERVICE
1912 netty netty tcp tcp:localhost:4444
2023 greetings platform-http rest http://0.0.0.0:7777/camel/greetings/{name} (GET)
2023 greetings platform-http http http://0.0.0.0:7777/q/dev
camel get service
PID NAME COMPONENT PROTOCOL SERVICE
1912 netty netty tcp tcp:localhost:4444
2023 greetings platform-http rest http://0.0.0.0:7777/camel/greetings/{name} (GET)
2023 greetings platform-http http http://0.0.0.0:7777/q/dev
在这里,您可以看到两个 Camel 集成。netty 集成托管一个 TCP 服务,该服务在端口 4444 上可用。其他 Camel 集成托管一个 REST 服务,该服务只能通过 GET 调用。第三个集成附带嵌入式 Web 控制台(通过-- console 选项开始)。
若要列出 Camel 组件,必须能够使用 Camel 控制台公告服务。
7.3.16.4.1. 列出 Circuit Breakers 的状态 复制链接链接已复制到粘贴板!
如果您的 Camel 集成使用 Circuit Breaker,则您可以使用 Camel CLI 输出 breakers 的状态,如下所示:
camel get circuit-breaker PID NAME COMPONENT ROUTE ID STATE PENDING SUCCESS FAIL REJECT 56033 mycb resilience4j route1 circuitBreaker1 HALF_OPEN 5 2 3 0
camel get circuit-breaker
PID NAME COMPONENT ROUTE ID STATE PENDING SUCCESS FAIL REJECT
56033 mycb resilience4j route1 circuitBreaker1 HALF_OPEN 5 2 3 0
在这里,我们可以看到断路器处于 一半开状态,如果故障开始下降,则断路器正在尝试转换回闭状态。
您可以使用 watch 选项运行 命令,以显示最新的状态,例如 watch camel get circuit-breaker。
7.3.17. 使用管道从终端编写脚本 复制链接链接已复制到粘贴板!
您可以将 Camel CLI 文件作为脚本执行,该脚本用于通过管道和过滤器进行终端脚本。
每次执行脚本时,都会使用 Camel 启动 JVM。这在内存用量方面不是非常快或低的情况,因此请使用 Camel CLI 终端脚本,例如,使用许多 Camel 组件或 Kamelets 来更轻松地从不同 IT 系统发送或接收数据。
这需要在文件顶部添加以下行,例如在下面的 upper.yaml 文件中:
要作为脚本执行它,您需要设置执行权限:
chmod +x upper.yaml
chmod +x upper.yaml
然后您可以作为一个脚本执行它:
echo "Hello\nWorld" | ./upper.yaml
echo "Hello\nWorld" | ./upper.yaml
此输出:
HELLO WORLD
HELLO
WORLD
您可以使用-- logging=true 打开日志记录,然后记录到 .camel-jbang/camel-pipe.log 文件。无法配置日志文件的名称。
echo "Hello\nWorld" | ./upper.yaml --logging=true
echo "Hello\nWorld" | ./upper.yaml --logging=true
7.3.17.1. 使用 stream: in line vs raw mode 复制链接链接已复制到粘贴板!
当使用 stream: 读取数据时,Stream 组件 有两种模式:
in 从系统中
-
行模式(默认)- 以单行形式读取输入(按换行符分隔)。邮件正文
是一个字符串。 -
原始模式 - 读取整个流,直到 流结束 为止。消息正文是一个
byte[]。
默认模式是因为过去创建流组件的方式造成的。因此,您可能希望将 stream:in?readLine=false 设置为使用 raw 模式。
7.3.18. 运行本地 Kamelets 复制链接链接已复制到粘贴板!
您可以使用 Camel CLI 尝试本地 Kamelets,而无需在 GitHub 中发布它们,或将其打包到 jar 中。
camel run --local-kamelet-dir=/path/to/local/kamelets earthquake.yaml
camel run --local-kamelet-dir=/path/to/local/kamelets earthquake.yaml
当 kamelets 来自本地文件系统时,可以在更新 Camel CLI in- dev 模式时实时重新载入它们。
您还可以指向 GitHub 存储库中的文件夹。例如:
camel run --local-kamelet-dir=https://github.com/apache/camel-kamelets-examples/tree/main/custom-kamelets user.java
camel run --local-kamelet-dir=https://github.com/apache/camel-kamelets-examples/tree/main/custom-kamelets user.java
如果从 GitHub 加载 kamelet,则无法实时重新加载它们。
7.3.19. 使用 platform-http 组件 复制链接链接已复制到粘贴板!
当从 platform-http 启动路由时,Camel CLI 会自动包括一个在端口 8080 上运行的 VertX HTTP 服务器。以下示例显示了 server.yaml 文件中的路由:
- from:
uri: "platform-http:/hello"
steps:
- set-body:
constant: "Hello World"
- from:
uri: "platform-http:/hello"
steps:
- set-body:
constant: "Hello World"
您可以使用以下命令运行此示例:
camel run server.yaml
camel run server.yaml
然后使用以下命令调用 HTTP 服务:
curl http://localhost:8080/hello
$ curl http://localhost:8080/hello
Hello World%
7.3.20. 使用 Java Bean 和处理器 复制链接链接已复制到粘贴板!
有基本支持,包括常规 Java 源文件和 Camel 路由,并允许 Camel CLI 运行时编译 Java 源。这意味着您可以包括较小的实用程序类、POJO、Camel Processors (应用程序需要)。
Java 源文件无法使用软件包名称。
7.3.21. Java 类中的依赖关系注入 复制链接链接已复制到粘贴板!
当运行与 camel-jbang 的 Camel 集成时,运行时基于 camel-main。这意味着没有 Spring Boot 或 Quarkus 可用。但是,支持在 Java 类中使用基于注解的依赖项注入。
7.3.21.1. 使用 Spring Boot 依赖项注入 复制链接链接已复制到粘贴板!
您可以使用以下 Spring Boot 注解:
-
@org.springframework.stereotype.Component或@org.springframework.stereotype.Serviceon 类创建类实例,并在 Registry 中注册。 -
@org.springframework.beans.factory.annotation.Autowired以在类项上注入 bean。@org.springframework.beans.factory.annotation.Qualifier可用于指定 bean id。 -
@org.springframework.beans.factory.annotation.Value注入 属性占位符。例如application.properties中定义的属性。 -
@org.springframework.context.annotation.Beanon a method to create a bean by call the method.
7.3.22. 调试 复制链接链接已复制到粘贴板!
可用的调试有两种:
-
Java 调试- Java 代码调试(标准 Java) -
Camel 路由调试Camel 路由(需要 Camel 工具插件)
7.3.22.1. Java 调试 复制链接链接已复制到粘贴板!
您可以使用 JBang 提供的- debug 标志来调试集成脚本。但是,要在启动 JVM 时启用 Java 调试,请使用 jbang 命令,而不是 camel,如下所示:
jbang --debug camel@apache/camel run hello.yaml Listening for transport dt_socket at address: 4004
jbang --debug camel@apache/camel run hello.yaml
Listening for transport dt_socket at address: 4004
您可以看到默认侦听端口 4004,但可以配置,如 JBang 调试 中所述。
这是标准的 Java 调试套接字。然后您可以使用您选择的 IDE。您可以添加 Processor 在路由执行过程中放置断点命中(与路由定义创建不同)。
7.3.22.2. Camel 路由调试 复制链接链接已复制到粘贴板!
Camel 路由调试器默认可用( camel-debug 组件会自动添加到 classpath 中)。默认情况下,它可以通过 URL 服务的 JMX 访问:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi/camel。然后,您可以使用您选择的集成开发环境(IDE)。
7.3.23. 健康检查 复制链接链接已复制到粘贴板!
通过 CLI 使用 Camel CLI 访问健康检查的状态,如下所示:
camel get health PID NAME AGE ID RL STATE RATE SINCE MESSAGE 61005 mybind 8s camel/context R UP 2/2/- 1s/3s/-
camel get health
PID NAME AGE ID RL STATE RATE SINCE MESSAGE
61005 mybind 8s camel/context R UP 2/2/- 1s/3s/-
此处您可以看到 Camel 是 UP。应用已运行 8 秒,并且调用了两个健康检查。
输出显示 默认 检查级别,如下所示:
-
CamelContext健康检查 -
特定于组件的健康检查(如
camel-kafka或camel-aws) - 自定义健康检查
-
任何不是
UP的检查
RATE 列显示由 / 分隔的三个数字。因此,2/2/- 表示总计 2 个检查,2 个成功且没有失败。当健康检查更改状态时,最后两个列将重置,因为这个数字是成功或失败的连续检查数量。因此,如果健康检查开始失败,则数字可以是:
camel get health PID NAME AGE ID RL STATE RATE SINCE MESSAGE 61005 mybind 3m2s camel/context R UP 77/-/3 1s/-/17s some kind of error
camel get health
PID NAME AGE ID RL STATE RATE SINCE MESSAGE
61005 mybind 3m2s camel/context R UP 77/-/3 1s/-/17s some kind of error
此处您可以看到数字已更改为 77/-/3。这意味着检查总数为 77。没有成功,但检查在一行中失败 3 次。SINCE 列对应于 RATE。因此,在这种情况下,您可以看到最近一次检查为 1 秒,检查在一行中已失败 17 秒。
您可以使用- level=full 来输出每个包含消费者和路由级别检查的健康检查。
健康检查可能会因为抛出异常而失败,这可以使用-- trace 标志显示:
在这里,您可以看到健康检查失败,因为 org.apache.kafka.common.config.ConfigException (由于无效的配置: Invalid url in bootstrap.servers: value )。
使用 camel get health --help 查看所有各种选项。