7.3. 创建并运行 Camel 路由


您可以使用 init 命令创建新的基本路由。例如,要创建 XML 路由,请运行以下命令:

camel init cheese.xml

这会使用示例路由创建文件 cheese.xml (当前目录中)。

要运行该文件,请运行:

camel run --camel-version=4.8.3.redhat-00004 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 会自动清理此目录(如果已存在)。

7.3.1. 从多个文件运行路由

您可以从多个文件运行路由,例如运行两个 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

您可以使用通配符(如 )匹配多个文件,如运行所有 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 *
注意

run 目标还可检测 属性 为 的文件,如 application.properties

7.3.2. 从输入参数运行路由

对于非常小的 Java 路由,可以将路由作为 CLI 参数提供,如下所示:

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 集成运行时,您可以在保存时更新 YAML 路由和更新。此选项适用于所有 DLS,包括 java,例如:

camel run hello.java --dev
注意

live reload 选项仅用于开发目的,如果您遇到重新加载 JVM 类加载问题(如 JVM 类加载问题),则可能需要重新启动集成。

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

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

您只能一次指定一个配置集名称,如-- 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 命令预配置参数。

7.3.6. 通过互联网下载 JAR

默认情况下,Camel CLI 会自动解析运行 Camel 所需的依赖项,这由 JBang 和 Camel 分别完成。如果组件需要在类路径上当前不可用的 JAR 需要,则 Camel 本身会在运行时检测到,然后可以自动下载 JAR。

Camel 按照以下顺序下载这些 JAR:

  1. 来自 ~/.m2/repository中的本地磁盘
  2. 从 Maven Central 中的互联网
  3. 从自定义第三方 Maven 存储库中的互联网
  4. ~/.m2/settings.xml 活跃的配置集中找到的所有软件仓库,或使用 --maven-settings 选项指定的 设置文件。

如果您不希望 Camel CLI 通过互联网下载,您可以使用-- download 选项关闭此选项,如下所示:

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

7.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 是属性文件的名称。

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>

虽然可以使用纯文本指定密码,但我们建议您首先配置 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

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

7.3.10.1. 从 GitHub gists 运行路由

使用 GitHub 中的 gists 是共享可轻松运行的小型 Camel 路由的一种快速方法。例如,要运行 gist,请使用:

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

7.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 会自动清理此目录。

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

7.3.13. 从剪贴板运行

您可以直接从 OS clipboard 运行 Camel 路由。这允许复制一些代码,然后快速运行路由。

camel run clipboard.<extension>

其中 <extension>,剪贴板的内容类型是 javaxmlyaml

例如,您可以将它复制到剪贴板中,然后运行路由:

<route>
  <from uri="timer:foo"/>
  <log message="Hello World"/>
</route>
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

这将列出集成的 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)

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>

Quarkus

在 Quarkus 应用程序中,添加以下依赖项:

<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 命令显示默认的集成,它等同于输入 camel get integrationscamel 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 显示所有可用的命令。

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

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 显示所有可用的命令。

7.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 命令。

7.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 更改所有正在运行的集成的日志级别。

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 集成。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

在这里,我们可以看到断路器处于 一半开状态,如果故障开始下降,则断路器正在尝试转换回闭状态。

注意

您可以使用 watch 选项运行 命令,以显示最新的状态,例如 watch camel get circuit-breaker

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

7.3.17.1. 使用 stream: in line vs raw mode

当使用 stream: in 从系统中 读取数据时,Stream 组件 有两种模式:

  • 行模式(默认)- 以单行形式读取输入(按换行符分隔)。邮件正文 是一个字符串
  • 原始模式 - 读取整个流,直到 流结束 为止。消息正文是一个 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
注意

当 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,则无法实时重新加载它们。

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"

您可以使用以下命令运行此示例:

camel run server.yaml

然后使用以下命令调用 HTTP 服务:

$ 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.Service on 类创建类实例,并在 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.Bean on 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

您可以看到默认侦听端口 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 是 UP。应用已运行 8 秒,并且调用了两个健康检查。

输出显示 默认 检查级别,如下所示:

  • CamelContext 健康检查
  • 特定于组件的健康检查(如 camel-kafkacamel-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 查看所有各种选项。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部