6.3. 创建并运行 Camel 路由
您可以使用 init 命令创建新的基本路由。例如,要创建 XML 路由,请运行以下命令:
camel init cheese.xml
这会使用示例路由创建文件 cheese.xml (当前目录中)。
要运行该文件,请运行:
camel run cheese.xml
您可以在 Camel 中创建并运行任何支持的 DSL,如 YAML、XML、Java、Groovy。
要创建新的 .java 路由,请运行:
camel init foo.java
当您使用 init 命令时,Camel 默认会在当前目录中创建该文件。但是,您可以使用 a-directory 选项在指定目录中创建该文件。例如,要在名为 foobar 的文件夹中创建,请运行:
camel init foo.java --directory=foobar
当您使用-- directory 选项时,Camel 会自动清理此目录(如果已存在)。
6.3.1. 从多个文件运行路由 复制链接链接已复制到粘贴板!
您可以从多个文件运行路由,例如运行两个 YAML 文件:
camel run one.yaml two.yaml
您可以从两个不同的文件(如 yaml 和 Java)运行路由:
camel run one.yaml hello.java
您可以使用通配符(如 )匹配多个文件,如运行所有 yaml 文件:
camel run *.yaml
您可以运行以 foo* 开始的所有文件:
camel run foo*
要运行目录中的所有文件,请使用:
camel run *
run 目标还可检测 属性 为 的文件,如 application.properties。
6.3.2. 从输入参数运行路由 复制链接链接已复制到粘贴板!
对于非常小的 Java 路由,可以将路由作为 CLI 参数提供,如下所示:
camel run --code='from("kamelet:beer-source").to("log:beer")'
这非常有限,因为 CLI 参数比文件非常繁琐。当您从输入参数运行路由时,请记住:
- 仅支持 Java DSL 代码。
- 代码用单引号括起,因此您可以在 Java DSL 中使用双引号。
- 代码仅限于可以从终端和 JBang 提供的字面值。
-
所有路由都必须在单
代码参数中定义。
使用-code 仅适用于非常快速、小的原型。
6.3.3. 带有实时重新加载的 dev 模式 复制链接链接已复制到粘贴板!
您可以使用 --dev 选项启用在源文件更新(保存)时实时重新载入路由的 dev 模式,如下所示:
camel run foo.yaml --dev
然后,在 Camel 集成运行时,您可以在保存时更新 YAML 路由和更新。此选项适用于所有 DLS,包括 java,例如:
camel run hello.java --dev
live reload 选项仅用于开发目的,如果您遇到重新加载 JVM 类加载问题(如 JVM 类加载问题),则可能需要重新启动集成。
6.3.4. 开发人员控制台 复制链接链接已复制到粘贴板!
您可以启用开发人员控制台,控制台为开发人员提供各种信息。要启用开发人员控制台,请运行:
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/
如果您安装了 jq,可以格式化并输出 JSON 数据,请运行:
curl -s -H "Accept: application/json" http://0.0.0.0:8080/q/dev/top/ | jq
6.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
您只能一次指定一个配置集名称,如-- profile=local,two 无效。
在 属性文件中,您可以配置来自 Camel 主的所有配置。要关闭并启用日志掩码,请运行以下命令:
camel.main.streamCaching=false
camel.main.logMask=true
您还可以配置 Camel 组件,如 camel-kafka,为代理声明 URL:
camel.component.kafka.brokers=broker1:9092,broker2:9092,broker3:9092
以 camel.jbang 开头的键是 Camel CLI 内部使用的保留键,并允许 Camel CLI 命令预配置参数。
6.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
6.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
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,com.foo:acme:1.0
6.3.8. 使用第三方 Maven 存储库 复制链接链接已复制到粘贴板!
首先从本地存储库下载 Camel CLI,然后从在线 Maven Central 存储库下载。要从第三方 Maven 存储库下载,您必须将此选项指定为 CLI 参数,或者在 application.properties 文件中。
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 路由时,application.properties 会自动载入:
camel run foo.java
您还可以显式指定要使用的属性文件:
camel run foo.java application.properties
或者您可以将它指定为配置集:
camel run foo.java --profile=application
其中配置文件 id 是属性文件的名称。
6.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>
虽然可以使用纯文本指定密码,但我们建议您首先配置 maven master 密码,然后使用它来配置存储库密码:
$ mvn -emp
Master password: camel
{hqXUuec2RowH8dA8vdqkF6jn4NU9ybOsDjuTmWvYj4U=}
以上密码必须添加到 ~/.m2/settings-security.xml 文件中,如下所示:
<settingsSecurity>
<master>{hqXUuec2RowH8dA8vdqkF6jn4NU9ybOsDjuTmWvYj4U=}</master>
</settingsSecurity>
然后您可以配置常规密码:
$ 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
如果要在不假定任何位置(即使 ~/.m2/settings.xml)的情况下运行 Camel 应用程序,请使用这个选项:
camel run foo.java --maven-settings=false
6.3.10. 运行托管在 GitHub 上的路由 复制链接链接已复制到粘贴板!
您可以使用 Camels 资源加载程序运行托管在 GitHub 上的路由。例如,要运行 Camel K 示例之一,请使用:
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
您还可以使用通配符(即 \ *)匹配多个文件,比如运行所有 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*
6.3.10.1. 从 GitHub gists 运行路由 复制链接链接已复制到粘贴板!
使用 GitHub 中的 gists 是共享可轻松运行的小型 Camel 路由的一种快速方法。例如,要运行 gist,请使用:
camel run https://gist.github.com/davsclaus/477ddff5cdeb1ae03619aa544ce47e92
gist 可以包含一个或多个文件,Camel CLI 将收集所有相关文件,因此 gist 可以包含多个路由、属性文件和 Java Bean。
6.3.11. 下载托管在 GitHub 的路由 复制链接链接已复制到粘贴板!
您可以使用 Camel CLI 将现有示例从 GitHub 下载到本地磁盘,允许修改示例并在本地运行。例如,您可以运行以下命令来下载 依赖项注入 示例:
camel init https://github.com/apache/camel-kamelets-examples/tree/main/jbang/dependency-injection
然后,文件(而不是子文件夹)下载到当前目录中。然后您可以使用以下内容在本地运行示例:
camel run *
您还可以使用-- directory 选项将文件下载到新文件夹,例如要将文件下载到名为 myproject 的文件夹,请运行:
camel init https://github.com/apache/camel-kamelets-examples/tree/main/jbang/dependency-injection --directory=myproject
使用- 目录 选项时,如果已存在,Camel 会自动清理此目录。
您可以在 dev 模式下运行示例,以便对源代码更改进行热部署。
camel run * --dev
您可以下载单个文件,例如下载一个 Camel K 示例,请运行:
camel init https://github.com/apache/camel-k-examples/blob/main/generic-examples/languages/simple.groovy
这是一个 groovy 路由,您可以使用 (或使用 *)运行:
camel run simple.groovy
6.3.11.1. 下载路由表单 GitHub gists 复制链接链接已复制到粘贴板!
您可以从 gists 下载文件,如下所示:
camel init https://gist.github.com/davsclaus/477ddff5cdeb1ae03619aa544ce47e92
这会将文件下载到本地磁盘,您可以在随后运行:
camel run *
您可以使用 the- directory 选项下载到新文件夹,例如,要下载到名为 foobar 的文件夹,请运行:
camel init https://gist.github.com/davsclaus/477ddff5cdeb1ae03619aa544ce47e92 --directory=foobar
使用- 目录 选项时,如果已存在,Camel 会自动清理此目录。
6.3.12. 运行 Camel K 集成或绑定 复制链接链接已复制到粘贴板!
Camel 支持运行 Camel K 集成和绑定文件,这些文件采用 CRD 格式(Kubernetes 自定义资源定义)。例如,运行名为 joke.yaml 的 kamelet 绑定文件:
#!/usr/bin/env jbang camel@apache/camel run
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
name: joke
spec:
source:
ref:
kind: Kamelet
apiVersion: camel.apache.org/v1
name: chuck-norris-source
properties:
period: 2000
sink:
ref:
kind: Kamelet
apiVersion: camel.apache.org/v1
name: log-sink
properties:
show-headers: false
camel run joke.yaml
6.3.13. 从剪贴板运行 复制链接链接已复制到粘贴板!
您可以直接从 OS clipboard 运行 Camel 路由。这允许复制一些代码,然后快速运行路由。
camel run clipboard.<extension>
其中 <extension>,剪贴板的内容类型是 java、xml 或 yaml。
例如,您可以将它复制到剪贴板中,然后运行路由:
<route>
<from uri="timer:foo"/>
<log message="Hello World"/>
</route>
camel run clipboard.xml
6.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
这将列出集成的 PID、名称和年龄。
您可以使用 stop 命令停止任何正在运行的 Camel 集成。例如,要停止 test1,请运行:
camel stop test1
Stopping running Camel integration (pid: 62506)
您可以使用 PID 停止集成:
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)
6.3.15. 控制 Quarkus 集成 复制链接链接已复制到粘贴板!
默认情况下,Camel CLI 仅控制使用 CLI 运行的 Camel 集成,如 camel run foo.java。
要使 CLI 能够控制和管理 Quarkus 应用程序,您需要在这些项目中添加依赖项以与 Camel CLI 集成。
Quarkus
在 Quarkus 应用程序中,添加以下依赖项:
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-cli-connector</artifactId>
</dependency>
6.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 3.20.1-SNAPSHOT Quarkus v3.2 1/1 Running 28m34s 854 0 0 0s/0s/-
63051 test1 3.20.1-SNAPSHOT JBang 1/1 Running 18s 14 0 0 0s/0s/-
63068 mygroovy 3.20.1-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 --help 显示所有可用的命令。
6.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 3.20.1-SNAPSHOT JBang Running 2m10s 131/322/4294 MB 70/73 MB 17ms (6) 7/8 7456/7456
14242 MyCamel 11.0.13 3.20.1-SNAPSHOT Quarkus 32. Running 33m40s 115/332/4294 MB 62/66 MB 37ms (6) 16/16 8428/8428
22116 bar 11.0.13 3.20.1-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 route
PID NAME ID FROM STATUS AGE TOTAL FAILED INFLIGHT MEAN MIN MAX SINCE-LAST
22104 chuck chuck-norris-source-1 timer://chuck?period=10000 Started 10s 1 0 0 163 163 163 9s
22116 bar route1 timer://yaml2?period=1000 Started 7s 7 0 0 1 0 11 0s
22104 chuck chuck kamelet://chuck-norris-source Started 10s 1 0 0 0 0 0 9s
22104 chuck log-sink-2 kamelet://source?routeId=log-sink-2 Started 10s 1 0 0 0 0 0 9s
14242 MyCamel hello timer://hello?period=2000 Started 31m41s 948 0 0 0 0 4 0s
使用 camel top --help 显示所有可用的命令。
6.3.16.2. 启动和停止路由 复制链接链接已复制到粘贴板!
camel cmd 用于在正在运行的 Camel 集成中执行各种命令,例如,用于启动和停止路由的命令。
要停止 chuck 集成中的所有路由,请运行:
camel cmd stop-route chuck
然后,对于 chuck 集成,状态将变为 Stopped :
camel get route
PID NAME ID FROM STATUS AGE TOTAL FAILED INFLIGHT MEAN MIN MAX SINCE-LAST
81663 chuck chuck kamelet://chuck-norris-source Stopped 600 0 0 0 0 1 4s
81663 chuck chuck-norris-source-1 timer://chuck?period=10000 Stopped 600 0 0 65 52 290 4s
81663 chuck log-sink-2 kamelet://source?routeId=log-sink-2 Stopped 600 0 0 0 0 1 4s
83415 bar route1 timer://yaml2?period=1000 Started 5m30s 329 0 0 0 0 10 0s
83695 MyCamel hello timer://hello?period=2000 Started 3m52s 116 0 0 0 0 9 1s
要启动路由,请运行:
camel cmd start-route chuck
要停止每个 Camel 集成中的所有路由,请使用-- 标志,如下所示:
all
camel cmd stop-route --all
要启动 所有路由,请使用:
camel cmd start-route --all
您可以使用逗号分隔一个或多个路由来停止一个或多个路由,例如 camel cmd start-route --id=route1,hello。如需更多详细信息,请使用 camel cmd start-route --help 命令。
6.3.16.3. 配置日志记录级别 复制链接链接已复制到粘贴板!
您可以通过以下方法查看正在运行的 Camel 集成的当前日志记录级别:
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
您可以使用- -all 更改所有正在运行的集成的日志级别。
6.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 集成。netty 集成托管一个 TCP 服务,该服务在端口 4444 上可用。其他 Camel 集成托管一个 REST 服务,该服务只能通过 GET 调用。第三个集成附带嵌入式 Web 控制台(通过-- console 选项开始)。
若要列出 Camel 组件,必须能够使用 Camel 控制台公告服务。
6.3.16.4.1. 列出 Circuit Breakers 的状态 复制链接链接已复制到粘贴板!
如果您的 Camel 集成使用链接:https://camel.apache.org/components/3.20.x/eips/circuitBreaker-eip.html [Circuit Breaker],您可以使用 Camel CLI 输出中断者的状态,如下所示:
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.
6.3.17. 使用管道从终端编写脚本 复制链接链接已复制到粘贴板!
您可以将 Camel CLI 文件作为脚本执行,该脚本用于通过管道和过滤器进行终端脚本。
每次执行脚本时,都会使用 Camel 启动 JVM。这在内存用量方面不是非常快或低的情况,因此请使用 Camel CLI 终端脚本,例如,使用许多 Camel 组件或 Kamelets 来更轻松地从不同 IT 系统发送或接收数据。
这需要在文件顶部添加以下行,例如在下面的 upper.yaml 文件中:
///usr/bin/env jbang --quiet camel@apache/camel pipe "$0" "$@" ; exit $?
# Will upper-case the input
- from:
uri: "stream:in"
steps:
- setBody:
simple: "${body.toUpperCase()}"
- to: "stream:out"
要作为脚本执行它,您需要设置执行权限:
chmod +x upper.yaml
然后您可以作为一个脚本执行它:
echo "Hello\nWorld" | ./upper.yaml
此输出:
HELLO
WORLD
您可以使用-- logging=true 打开日志记录,然后记录到 .camel-jbang/camel-pipe.log 文件。无法配置日志文件的名称。
echo "Hello\nWorld" | ./upper.yaml --logging=true
6.3.17.1. 使用 stream: in line vs raw mode 复制链接链接已复制到粘贴板!
当使用 stream: 读取数据时,Stream 组件 有两种模式:
in 从系统中
-
行模式(默认)- 以单行形式读取输入(按换行符分隔)。邮件正文
是一个字符串。 -
原始模式 - 读取整个流,直到 流结束 为止。消息正文是一个
byte[]。
默认模式是因为过去创建流组件的方式造成的。因此,您可能希望将 stream:in?readLine=false 设置为使用 raw 模式。
6.3.18. 运行本地 Kamelets 复制链接链接已复制到粘贴板!
您可以使用 Camel CLI 尝试本地 Kamelets,而无需在 GitHub 中发布它们,或将其打包到 jar 中。
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
如果从 GitHub 加载 kamelet,则无法实时重新加载它们。
6.3.19. 使用 platform-http 组件 复制链接链接已复制到粘贴板!
当从 platform-http 启动路由时,Camel CLI 会自动包括一个在端口 8080 上运行的 VertX HTTP 服务器。以下示例显示了 server.yaml 文件中的路由:
- from:
uri: "platform-http:/hello"
steps:
- set-body:
constant: "Hello World"
您可以使用以下命令运行此示例:
camel run server.yaml
然后使用以下命令调用 HTTP 服务:
$ curl http://localhost:8080/hello
Hello World%
6.3.20. 使用 Java Bean 和处理器 复制链接链接已复制到粘贴板!
有基本支持,包括常规 Java 源文件和 Camel 路由,并允许 Camel CLI 运行时编译 Java 源。这意味着您可以包括较小的实用程序类、POJO、Camel Processors (应用程序需要)。
Java 源文件无法使用软件包名称。
6.3.21. 调试 复制链接链接已复制到粘贴板!
可用的调试有两种:
-
Java 调试- Java 代码调试(标准 Java) -
Camel 路由调试Camel 路由(需要 Camel 工具插件)
6.3.21.1. Java debugging 复制链接链接已复制到粘贴板!
您可以使用 JBang 提供的- debug 标志来调试集成脚本。但是,要在启动 JVM 时启用 Java 调试,请使用 jbang 命令,而不是 camel,如下所示:
jbang --debug camel@apache/camel run hello.yaml
Listening for transport dt_socket at address: 4004
您可以看到默认侦听端口 4004,但可以配置,如 JBang 调试 中所述。
这是标准的 Java 调试套接字。然后您可以使用您选择的 IDE。您可以添加 Processor 在路由执行过程中放置断点命中(与路由定义创建不同)。
6.3.21.2. Camel 路由调试 复制链接链接已复制到粘贴板!
Camel 路由调试器默认可用( camel-debug 组件会自动添加到 classpath 中)。默认情况下,它可以通过 URL 服务的 JMX 访问:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi/camel。然后,您可以使用您选择的集成开发环境(IDE)。
6.3.22. 健康检查 复制链接链接已复制到粘贴板!
通过 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 是 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
此处您可以看到数字已更改为 77/-/3。这意味着检查总数为 77。没有成功,但检查在一行中失败 3 次。SINCE 列对应于 RATE。因此,在这种情况下,您可以看到最近一次检查为 1 秒,检查在一行中已失败 17 秒。
您可以使用- level=full 来输出每个包含消费者和路由级别检查的健康检查。
健康检查可能会因为抛出异常而失败,这可以使用-- trace 标志显示:
camel get health --trace
PID NAME AGE ID RL STATE RATE SINCE MESSAGE
61038 mykafka 6m19s camel/context R UP 187/187/- 1s/6m16s/-
61038 mykafka 6m19s camel/kafka-consumer-kafka-not-secure… R DOWN 187/-/187 1s/-/6m16s KafkaConsumer is not ready - Error: Invalid url in bootstrap.servers: value
------------------------------------------------------------------------------------------------------------------------
STACK-TRACE
------------------------------------------------------------------------------------------------------------------------
PID: 61038
NAME: mykafka
AGE: 6m19s
CHECK-ID: camel/kafka-consumer-kafka-not-secured-source-1
STATE: DOWN
RATE: 187
SINCE: 6m16s
METADATA:
bootstrap.servers = value
group.id = 7d8117be-41b4-4c81-b4df-cf26b928d38a
route.id = kafka-not-secured-source-1
topic = value
MESSAGE: KafkaConsumer is not ready - Error: Invalid url in bootstrap.servers: value
org.apache.kafka.common.KafkaException: Failed to construct kafka consumer
at org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:823)
at org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:664)
at org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:645)
at org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:625)
at org.apache.camel.component.kafka.DefaultKafkaClientFactory.getConsumer(DefaultKafkaClientFactory.java:34)
at org.apache.camel.component.kafka.KafkaFetchRecords.createConsumer(KafkaFetchRecords.java:241)
at org.apache.camel.component.kafka.KafkaFetchRecords.createConsumerTask(KafkaFetchRecords.java:201)
at org.apache.camel.support.task.ForegroundTask.run(ForegroundTask.java:123)
at org.apache.camel.component.kafka.KafkaFetchRecords.run(KafkaFetchRecords.java:125)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: org.apache.kafka.common.config.ConfigException: Invalid url in bootstrap.servers: value
at org.apache.kafka.clients.ClientUtils.parseAndValidateAddresses(ClientUtils.java:59)
at org.apache.kafka.clients.ClientUtils.parseAndValidateAddresses(ClientUtils.java:48)
at org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:730)
... 13 more
在这里,您可以看到健康检查失败,因为 org.apache.kafka.common.config.ConfigException (由于无效的配置: Invalid url in bootstrap.servers: value )。
使用 camel get health --help 查看所有各种选项。