1.5. 迁移过程


迁移过程由以下步骤组成:

任务描述

创建 maven 项目

使用 Camel JBang 的 camel cli 导出文件,它将创建一个 maven 项目。

调整配置

通过添加和更改文件来配置项目。

Build

构建项目将生成 JAR 文件。构建容器镜像并推送到容器注册表。

部署

将 kubernetes 对象部署到 Openshift 集群并运行 pod。

1.5.1. 迁移步骤

1.5.1.1. 使用案例 1 - 使用配置简单集成路由

根据以下集成路由,带有 rest 和 kamelet 端点。

import org.apache.camel.builder.RouteBuilder;

public class Http2Jms extends RouteBuilder {
  @Override
  public void configure() throws Exception {
      rest()
      .post("/message")
      .id("rest")
      .to("direct:jms");

      from("direct:jms")
      .log("Sending message to JMS {{broker}}: ${body}")
      .to("kamelet:jms-amqp-10-sink?remoteURI=amqp://myhost:61616&destinationName=queue");
  }
}

http2jms.properties 文件

broker=amqp://172.30.177.216:61616
queue=qtest

kamel run 命令

kamel run Http2Jms.java -p file://$PWD/http2jms.properties --annotation some_annotation=foo --env MY_ENV1=VAL1

它使用注解构建并运行 pod。环境变量和属性文件作为 ConfigMap 添加并挂载到 pod 中。

1.5.1.1.1. 第 1 步 - 创建 maven 项目

使用 camel jbang 将文件导出到 maven 项目。

camel export \
--runtime=quarkus \
--quarkus-group-id=com.redhat.quarkus.platform \
--quarkus-version=3.8.5.redhat-00003 \
--repos=https://maven.repository.redhat.com/ga \
--dep=io.quarkus:quarkus-openshift \
--gav=com.mycompany:ceq-app:1.0 \
--dir=ceq-app1 \
Http2Jms.java

参数的描述:

参数描述

--runtime=quarkus

使用 Quarkus 运行时。生成的项目包含 quarkus BOM。

--quarkus-group-id=com.redhat.quarkus.platform

红帽支持的 quarkus 平台 maven 工件组是 com.redhat.quarkus.platform

--quarkus-version=3.8.5.redhat-00003

这是目前支持的最新版本。请参阅 Quarkus 文档中的 最新版本的。

--repos=https://maven.repository.redhat.com/ga

在 GA 版本中使用 Red Hat Maven 存储库。

--dep=io.quarkus:quarkus-openshift

将 quarkus-openshift 依赖项添加到 pom.xml 中,以在 Openshift 中进行构建。

--gav=com.mycompany:ceq-app:1.0

将 GAV 设置为生成的 pom.xml。您必须为项目相应地设置 GAV。

--dir=ceq-app1

maven 项目目录。

您可以使用 camel export --help查看更多参数

如果使用 kamelets,它必须是 maven 项目的一部分。您可以下载 Kamelet 存储库 并解压缩它。如果您有任何自定义 kamelet,请将它们添加到此 kamelet 目录中。

在使用 camel 导出时,您可以使用 parameter --local-kamelet-dir=<kamelet directory& gt;,它将所有 kamelets 复制到 src/main/resources/kamelets,稍后被打包到最终存档中。

如果您选择不使用 -local-kamelet-dir=<kamelet directory > 参数,则必须手动将所需的 kamelet yaml 文件复制到上述目录中。

跟踪生成的 pom 中的工件名称,因为工件名称在生成的 Openshift 文件中(Deployment、Service、Route 等)。

1.5.1.1.2. 第 2 步 - 配置项目

这是配置 maven 项目和工件以适合您的环境的步骤。

进入 maven 项目

cd ceq-app1

设置 docker 构建策略。

echo quarkus.openshift.build-strategy=docker >> src/main/resources/application.properties

src/main/docker 中将基础镜像改为 OpenJDK 21 (可选)

FROM registry.access.redhat.com/ubi9/openjdk-21:1.20

将 pom.xml 中的编译器版本更改为 21 (可选)

<maven.compiler.release>21</maven.compiler.release>

如果需要,在 src/main/resources/application.properties 中设置环境变量、标签和注解。

quarkus.openshift.annotations.sample_annotation=sample_value1
quarkus.openshift.env.vars.SAMPLE_KEY=sample_value2
quarkus.openshift.labels.sample_label=sample_value3

如果要使用这些参数自定义镜像和容器 registry 设置:

quarkus.container-image.registry
quarkus.container-image.group
quarkus.container-image.name
quarkus.container-image.tag

因为有一个 http2jms.properties,其配置在运行时使用,kamel cli 会创建一个 ConfigMap,并将它挂载到 pod 中。红帽构建的 Apache Camel for Quarkus 必须达到相同的目的。

'src/main/kubernetes/common.yml 中创建一个名为 ceq-app 的本地 ConfigMap 文件,该文件将是镜像构建过程的一部分。以下命令将 ConfigMap 键设置为 application.properties

oc create configmap ceq-app --from-file application.properties=http2jms.properties --dry-run=client -oyaml > src/main/kubernetes/common.yml

将以下属性添加到 application.properties,以便 Quarkus 挂载 ConfigMap

quarkus.openshift.app-config-map=ceq-app
1.5.1.1.3. 第 3 步 - 构建

构建用于本地检查的软件包。

./mvnw -ntp package

此步骤在本地构建 maven 工件(JAR 文件),并在 target/kubernetes 目录中生成 Openshift 文件。

跟踪 target/kubernetes/openshift.yml,以了解部署到 Openshift 集群的部署。

1.5.1.1.4. 第 4 步 - 构建和部署

构建软件包并部署到 Openshift

./mvnw -ntp package -Dquarkus.openshift.deploy=true

您可以跟踪 maven 输出中的镜像构建。构建后,您可以看到 pod 正在运行。

1.5.1.1.5. 第 5 步 - 测试

验证集成路由是否正常工作。

如果项目可以在本地运行,您可以尝试以下操作:

mvn -ntp quarkus:run

按照 pod 容器日志进行操作

oc logs -f `oc get pod -l app.kubernetes.io/name=app -oname`

它必须显示类似如下的输出:

INFO exec -a "java" java -Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager -cp "." -jar /deployments/quarkus-run.jar
INFO running in /deployments
__  ____  __  _____   ___  __ ____  ______
--/ __ \/ / / / _ | / _ \/ //_/ / / / __/
-/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
[org.apa.cam.qua.cor.CamelBootstrapRecorder] (main) Bootstrap runtime: org.apache.camel.quarkus.main.CamelMainRuntime
[org.apa.cam.mai.MainSupport] (main) Apache Camel (Main) 4.4.0.redhat-00025 is starting
[org.apa.cam.imp.eng.AbstractCamelContext] (main) Apache Camel 4.4.0.redhat-00025 (camel-1) is starting
[org.apa.cam.mai.BaseMainSupport] (main) Property-placeholders summary
[org.apa.cam.mai.BaseMainSupport] (main)     [MicroProfilePropertiesSource] broker=amqp://172.30.177.216:61616
[org.apa.cam.mai.BaseMainSupport] (main)     [MicroProfilePropertiesSource] queue=qtest
[org.apa.cam.mai.BaseMainSupport] (main)     [ms-amqp-10-sink.kamelet.yaml] destinationName=qtest
[org.apa.cam.mai.BaseMainSupport] (main)     [ms-amqp-10-sink.kamelet.yaml] connectionFactoryBean=connectionFactoryBean-1
[org.apa.cam.mai.BaseMainSupport] (main)     [ms-amqp-10-sink.kamelet.yaml] remoteURI=amqp://172.30.177.216:61616
[org.apa.cam.imp.eng.AbstractCamelContext] (main) Routes startup (started:3)
[org.apa.cam.imp.eng.AbstractCamelContext] (main)     Started route1 (direct://jms)
[org.apa.cam.imp.eng.AbstractCamelContext] (main)     Started rest (rest://post:/message)
[org.apa.cam.imp.eng.AbstractCamelContext] (main)     Started jms-amqp-10-sink-1 (kamelet://source)
[org.apa.cam.imp.eng.AbstractCamelContext] (main) Apache Camel 4.4.0.redhat-00025 (camel-1) started in 17ms (build:0ms init:0ms start:17ms)
[io.quarkus] (main) app 1.0 on JVM (powered by Quarkus 3.8.5.redhat-00004) started in 1.115s. Listening on: http://0.0.0.0:8080
[io.quarkus] (main) Profile prod activated.
[io.quarkus] (main) Installed features: [camel-amqp, camel-attachments, camel-core, camel-direct, camel-jms, camel-kamelet, camel-microprofile-health, camel-platform-http, camel-rest, camel-rest-openapi, camel-yaml-dsl, cdi, kubernetes, qpid-jms, smallrye-context-propagation, smallrye-health, vertx]

请参阅 MicroProfilePropertiesSource 行,它显示添加为 ConfigMap 的属性文件的内容,并挂载到容器集。

1.5.1.2. 使用案例 2 - Knative 集成路由

这个用例有两个 Knative 集成路由。Feed 路由定期向 Knative 频道发送文本信息,第二个路由 Printer 接收来自 Knative 频道的信息并打印它。

对于 Camel K,有两个 pod,各自运行一个集成路由。因此,此迁移必须创建两个项目,各自具有一个集成路由。

之后,您可以将其自定义为单一 pod 中具有两个集成路由的单个 maven 项目。

Feed 集成路由。

import org.apache.camel.builder.RouteBuilder;

public class Feed extends RouteBuilder {
  @Override
  public void configure() throws Exception {
    from("timer:clock?period=15s")
      .setBody().simple("Hello World from Camel - ${date:now}")
      .log("sent message to messages channel: ${body}")
      .to("knative:channel/messages");
  }
}

打印机 集成路由。

import org.apache.camel.builder.RouteBuilder;

public class Printer extends RouteBuilder {
  @Override
  public void configure() throws Exception {
    from("knative:channel/messages")
      .convertBodyTo(String.class)
      .to("log:info");
  }
}

kamel run 命令显示如何使用 Camel K 运行。

kamel run Feed.java
kamel run Printer.java

将有两个 pod 正在运行。

1.5.1.2.1. 第 1 步 - 创建 maven 项目

使用 camel jbang 将文件导出到完整的 maven 项目

导出 集成。

camel export \
--runtime=quarkus \
--quarkus-group-id=com.redhat.quarkus.platform \
--quarkus-version=3.8.5.redhat-00003 \
--repos=https://maven.repository.redhat.com/ga \
--dep=io.quarkus:quarkus-openshift \
--gav=com.mycompany:ceq-feed:1.0 \
--dir=ceq-feed \
Feed.java

导出 打印机 集成。

camel export \
--runtime=quarkus \
--quarkus-group-id=com.redhat.quarkus.platform \
--quarkus-version=3.8.5.redhat-00003 \
--repos=https://maven.repository.redhat.com/ga \
--dep=io.quarkus:quarkus-openshift \
--gav=com.mycompany:ceq-printer:1.0 \
--dir=ceq-printer \
Printer.java

将为每个集成创建一个 maven 项目。

1.5.1.2.2. 第 2 步 - 配置项目

此步骤是配置 maven 项目和工件以适合您的环境。使用案例 1 包含有关 ConfigMap 中的标签、注解和配置的信息。

进入 maven 项目

cd ceq-feed

设置 docker 构建策略。

echo quarkus.openshift.build-strategy=docker >> src/main/resources/application.properties

src/main/docker 中将基础镜像改为 OpenJDK 21 (可选)

FROM registry.access.redhat.com/ubi9/openjdk-21:1.20

将 pom.xml 中的编译器版本更改为 21 (可选)

<maven.compiler.release>21</maven.compiler.release>

openshift 添加为部署目标。

quarkus.kubernetes.deployment-target=openshift

您必须设置这些容器镜像属性,以便在生成的 openshift.yml 和 knative.yml 文件中设置镜像地址。

quarkus.container-image.registry=image-registry.openshift-image-registry.svc:5000
quarkus.container-image.group=<namespace>

application.properties 中添加以下属性,以允许 Knative 控制器将 K_SINK 环境变量注入部署。

quarkus.openshift.labels."bindings.knative.dev/include"=true

src/main/resources 中添加 knative.json。这是 Camel 连接到 Knative 频道所需的配置。

注意

k.sink 属性占位符。当 pod 运行时,它将查看名为 K_SINK 的环境变量,并在 url 值中替换。

{
  "services": [
    {
      "type": "channel",
      "name": "messages",
      "url": "{{k.sink}}",
      "metadata": {
        "camel.endpoint.kind": "sink",
        "knative.apiVersion": "messaging.knative.dev/v1",
        "knative.kind": "Channel",
        "knative.reply": "false"
      }
    }
  ]
}

添加以下属性以允许 Camel 加载 Knative 环境配置。

camel.component.knative.environmentPath=classpath:knative.json

要使注入工作,您必须创建一个 Knative SinkBinding 对象。

SinkBinding 文件添加到 src/main/kubernetes/openshift.yml

cat <<EOF >> src/main/kubernetes/openshift.yml
apiVersion: sources.knative.dev/v1
kind: SinkBinding
metadata:
  finalizers:
  - sinkbindings.sources.knative.dev
  name: ceq-feed
spec:
  sink:
    ref:
      apiVersion: messaging.knative.dev/v1
      kind: Channel
      name: messages
  subject:
    apiVersion: apps/v1
    kind: Deployment
    name: ceq-feed
EOF

现在,配置 ceq-printer 项目。

cd ceq-printer

设置 docker 构建策略。

echo quarkus.openshift.build-strategy=docker >> src/main/resources/application.properties

src/main/docker 中将基础镜像改为 OpenJDK 21 (可选)

FROM registry.access.redhat.com/ubi9/openjdk-21:1.20

将 pom.xml 中的编译器版本更改为 21 (可选)

<maven.compiler.release>21</maven.compiler.release>

knative 设置为部署目标。

quarkus.kubernetes.deployment-target=knative

您必须设置这些容器镜像属性,以便在生成的 openshift.yml 和 knative.yml 文件中正确设置镜像地址。

quarkus.container-image.registry=image-registry.openshift-image-registry.svc:5000
quarkus.container-image.group=<namespace>

src/main/resources 中添加 knative.json。这是 Camel 连接到 Knative 频道所需的配置。

{
  "services": [
    {
      "type": "channel",
      "name": "messages",
      "path": "/channels/messages",
      "metadata": {
        "camel.endpoint.kind": "source",
        "knative.apiVersion": "messaging.knative.dev/v1",
        "knative.kind": "Channel",
        "knative.reply": "false"
      }
    }
  ]
}

添加以下属性以允许 Camel 加载 Knative 环境配置。

camel.component.knative.environmentPath=classpath:knative.json

从频道到 sink 的消息发送需要 Knative 订阅

Subscription 文件添加到 src/main/kubernetes/knative.yml

apiVersion: messaging.knative.dev/v1
kind: Subscription
metadata:
  finalizers:
  - subscriptions.messaging.knative.dev
  name: ceq-printer
spec:
  channel:
    apiVersion: messaging.knative.dev/v1
    kind: Channel
    name: messages
  subscriber:
    ref:
      apiVersion: serving.knative.dev/v1
      kind: Service
      name: ceq-printer
    uri: /channels/messages
1.5.1.2.3. 第 3 步 - 构建

构建用于本地检查的软件包。

./mvnw -ntp package

此步骤在本地构建 maven 工件(JAR 文件),并在 target/kubernetes 目录中生成 Openshift 文件。

跟踪 target/kubernetes/openshift.yml 和 'target/kubernetes/knative.yml',以了解部署到 Openshift 集群的部署。

1.5.1.2.4. 第 4 步 - 构建和部署

构建软件包并部署到 Openshift。

./mvnw -ntp package -Dquarkus.openshift.deploy=true

您可以跟踪 maven 输出中的镜像构建。构建后,您可以看到 pod 正在运行。

1.5.1.2.5. 第 5 步 - 测试

验证集成路由是否正常工作。

按照 pod 容器日志进行操作

oc logs -f `oc get pod -l app.kubernetes.io/name=ceq-feed -oname`

它必须显示类似如下的输出:

CEQ-feed pod

INFO exec -a "java" java -Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager -cp "." -jar /deployments/quarkus-run.jar
INFO running in /deployments
__  ____  __  _____   ___  __ ____  ______
 --/ __ \/ / / / _ | / _ \/ //_/ / / / __/
 -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
[org.apa.cam.qua.cor.CamelBootstrapRecorder] (main) Bootstrap runtime: org.apache.camel.quarkus.main.CamelMainRuntime
[org.apa.cam.mai.MainSupport] (main) Apache Camel (Main) 4.4.0.redhat-00025 is starting
[org.apa.cam.mai.BaseMainSupport] (main) Auto-configuration summary
[org.apa.cam.mai.BaseMainSupport] (main)     [MicroProfilePropertiesSource] camel.component.knative.environmentPath=classpath:knative.json
[org.apa.cam.imp.eng.AbstractCamelContext] (main) Apache Camel 4.4.0.redhat-00025 (camel-1) is starting
[org.apa.cam.mai.BaseMainSupport] (main) Property-placeholders summary
[org.apa.cam.mai.BaseMainSupport] (main)     [OS Environment Variable]      k.sink=http://hello-kn-channel.cmiranda-camel.svc.cluster.local
[org.apa.cam.imp.eng.AbstractCamelContext] (main) Routes startup (started:1)
[org.apa.cam.imp.eng.AbstractCamelContext] (main)     Started route1 (timer://clock)
[org.apa.cam.imp.eng.AbstractCamelContext] (main) Apache Camel 4.4.0.redhat-00025 (camel-1) started in 43ms (build:0ms init:0ms start:43ms)
[io.quarkus] (main) ceq-feed 1.0 on JVM (powered by Quarkus 3.8.5.redhat-00004) started in 1.386s. Listening on: http://0.0.0.0:8080
[io.quarkus] (main) Profile prod activated.
[io.quarkus] (main) Installed features: [camel-attachments, camel-cloudevents, camel-core, camel-knative, camel-platform-http, camel-rest, camel-rest-openapi, camel-timer, cdi, kubernetes, smallrye-context-propagation, vertx]
[route1] (Camel (camel-1) thread #1 - timer://clock) sent message to hello channel: Hello World from Camel - Thu Aug 01 13:54:41 UTC 2024
[route1] (Camel (camel-1) thread #1 - timer://clock) sent message to hello channel: Hello World from Camel - Thu Aug 01 13:54:56 UTC 2024
[route1] (Camel (camel-1) thread #1 - timer://clock) sent message to hello channel: Hello World from Camel - Thu Aug 01 13:55:11 UTC 2024

请参阅 Property-placeholders。它显示 k.sink 属性值。

CEQ-printer pod

INFO exec -a "java" java -Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager -cp "." -jar /deployments/quarkus-run.jar
INFO running in /deployments
__  ____  __  _____   ___  __ ____  ______
 --/ __ \/ / / / _ | / _ \/ //_/ / / / __/
 -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
[org.apa.cam.qua.cor.CamelBootstrapRecorder] (main) Bootstrap runtime: org.apache.camel.quarkus.main.CamelMainRuntime
[org.apa.cam.mai.MainSupport] (main) Apache Camel (Main) 4.4.0.redhat-00025 is starting
[org.apa.cam.mai.BaseMainSupport] (main) Auto-configuration summary
[org.apa.cam.mai.BaseMainSupport] (main)     [MicroProfilePropertiesSource] camel.component.knative.environmentPath=classpath:knative.json
[org.apa.cam.imp.eng.AbstractCamelContext] (main) Apache Camel 4.4.0.redhat-00025 (camel-1) is starting
[org.apa.cam.imp.eng.AbstractCamelContext] (main) Routes startup (started:1)
[org.apa.cam.imp.eng.AbstractCamelContext] (main)     Started route1 (knative://channel/hello)
[org.apa.cam.imp.eng.AbstractCamelContext] (main) Apache Camel 4.4.0.redhat-00025 (camel-1) started in 10ms (build:0ms init:0ms start:10ms)
[io.quarkus] (main) ceq-printer 1.0 on JVM (powered by Quarkus 3.8.5.redhat-00004) started in 1.211s. Listening on: http://0.0.0.0:8080
[io.quarkus] (main) Profile prod activated.
[io.quarkus] (main) Installed features: [camel-attachments, camel-cloudevents, camel-core, camel-knative, camel-log, camel-platform-http, camel-rest, camel-rest-openapi, cdi, kubernetes, smallrye-context-propagation, vertx]
[info] (executor-thread-1) Exchange[ExchangePattern: InOnly, BodyType: String, Body: Hello World from Camel - Thu Aug 01 13:54:41 UTC 2024]
[info] (executor-thread-1) Exchange[ExchangePattern: InOnly, BodyType: String, Body: Hello World from Camel - Thu Aug 01 13:54:56 UTC 2024]
[info] (executor-thread-1) Exchange[ExchangePattern: InOnly, BodyType: String, Body: Hello World from Camel - Thu Aug 01 13:55:11 UTC 2024]

1.5.1.3. 使用案例 3 - Pipe

将以下集成路由指定为 KameletBinding。

apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
  name: sample
spec:
  source:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1alpha1
      name: timer-source
    properties:
      period: 5000
      contentType: application/json
      message:  '{"id":"1","field":"hello","message":"Camel Rocks"}'
  steps:
  - ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1alpha1
      name: extract-field-action
    properties:
      field: "message"
  sink:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1
      name: log-sink
    properties:
      showStreams: true
1.5.1.3.1. 第 1 步 - 创建 maven 项目

使用 camel jbang 将文件导出到 maven 项目。

camel export \
--runtime=quarkus \
--quarkus-group-id=com.redhat.quarkus.platform \
--quarkus-version=3.8.5.redhat-00003 \
--repos=https://maven.repository.redhat.com/ga \
--dep=io.quarkus:quarkus-openshift \
--gav=com.mycompany:ceq-timer2log-kbind:1.0 \
--dir=ceq-timer2log-kbind \
timer-2-log-kbind.yaml

您可以使用 camel export --help查看更多参数

1.5.1.3.2. 第 2 步 - 配置项目

这是配置 maven 项目和工件以适合您的环境的步骤。

注意

您可以遵循常见配置的用例 1 和 2,我们将提供 KameletBinding 配置所需的步骤。

您可以尝试使用 camel jbang 在本地运行集成路由,以了解它在构建和部署到 Openshift 前如何工作。

进入 maven 项目

cd ceq-timer2log-kbind

请参阅关于如何管理 Kamelets 的开头的备注。对于此迁移用例,我在 pom.xml 中使用 org.apache.camel.kamelets:camel-kamelets 依赖项。

在导出时,它会在 application.properties 中添加以下属性,但您可以将其删除。

quarkus.native.resources.includes
camel.main.routes-include-pattern

设置 docker 构建策略。

echo quarkus.openshift.build-strategy=docker >> src/main/resources/application.properties

如果您的 KameletKameletBinding 具有如下特征注解: trait.camel.apache.org/environment.vars: "my_key=my_val",那么您必须遵循特征配置部分来使用 Quarkus 属性进行设置。

1.5.1.3.3. 第 3 步 - 构建

构建用于本地检查的软件包。

./mvnw -ntp package

此步骤在本地构建 maven 工件(JAR 文件),并在 target/kubernetes 目录中生成 Openshift 清单文件。

跟踪 target/kubernetes/openshift.yml,以了解部署到 Openshift 集群的部署。

1.5.1.3.4. 第 4 步 - 构建和部署

构建软件包并部署到 Openshift。

./mvnw -ntp package -Dquarkus.openshift.deploy=true

您可以跟踪 maven 输出中的镜像构建。构建后,您可以看到 pod 正在运行。

1.5.1.3.5. 第 5 步 - 测试

验证集成路由是否正常工作。

按照 pod 容器日志进行操作

oc logs -f `oc get pod -l app.kubernetes.io/name=ceq-timer2log-kbind -oname`

它必须显示类似如下的输出:

[org.apa.cam.qua.cor.CamelBootstrapRecorder] (main) Bootstrap runtime: org.apache.camel.quarkus.main.CamelMainRuntime
[org.apa.cam.mai.MainSupport] (main) Apache Camel (Main) 4.4.0.redhat-00025 is starting
[org.apa.cam.cli.con.LocalCliConnector] (main) Management from Camel JBang enabled
[org.apa.cam.imp.eng.AbstractCamelContext] (main) Apache Camel 4.4.0.redhat-00025 (camel-1) is starting
[org.apa.cam.mai.BaseMainSupport] (main) Property-placeholders summary
[org.apa.cam.mai.BaseMainSupport] (main)     [timer-source.kamelet.yaml]    period=5000
[org.apa.cam.mai.BaseMainSupport] (main)     [timer-source.kamelet.yaml]    message={"id":"1","field":"hello","message":"Camel Rocks"}
[org.apa.cam.mai.BaseMainSupport] (main)     [timer-source.kamelet.yaml]    contentType=application/json
[org.apa.cam.mai.BaseMainSupport] (main)     [log-sink.kamelet.yaml]        showStreams=true
[org.apa.cam.mai.BaseMainSupport] (main)     [ct-field-action.kamelet.yaml] extractField=extractField-1
[org.apa.cam.mai.BaseMainSupport] (main)     [ct-field-action.kamelet.yaml] field=message
[org.apa.cam.imp.eng.AbstractCamelContext] (main) Routes startup (started:4)
[org.apa.cam.imp.eng.AbstractCamelContext] (main)     Started sample (kamelet://timer-source)
[org.apa.cam.imp.eng.AbstractCamelContext] (main)     Started timer-source-1 (timer://tick)
[org.apa.cam.imp.eng.AbstractCamelContext] (main)     Started log-sink-2 (kamelet://source)
[org.apa.cam.imp.eng.AbstractCamelContext] (main)     Started extract-field-action-3 (kamelet://source)
[org.apa.cam.imp.eng.AbstractCamelContext] (main) Apache Camel 4.4.0.redhat-00025 (camel-1) started in 276ms (build:0ms init:0ms start:276ms)
[io.quarkus] (main) ceq-timer2log-kbind 1.0 on JVM (powered by Quarkus 3.8.5.redhat-00004) started in 1.867s. Listening on: http://0.0.0.0:8080
[io.quarkus] (main) Profile prod activated.
[io.quarkus] (main) Installed features: [camel-attachments, camel-cli-connector, camel-console, camel-core, camel-direct, camel-jackson, camel-kamelet, camel-log, camel-management, camel-microprofile-health, camel-platform-http, camel-rest, camel-rest-openapi, camel-timer, camel-xml-jaxb, camel-yaml-dsl, cdi, kubernetes, smallrye-context-propagation, smallrye-health, vertx]
[log-sink] (Camel (camel-1) thread #2 - timer://tick) Exchange[ExchangePattern: InOnly, BodyType: org.apache.camel.converter.stream.InputStreamCache, Body: "Camel Rocks"]

1.5.2. 取消部署 kubernetes 资源

要删除 quarkus-maven-plugin 安装的所有 resouces,您必须运行以下命令:

oc delete -f target/kubernetes/openshift.yml

1.5.3. Kubernetes CronJob

当有类型为 cron、quartz 或 timer 的消费者时,Camel K 具有一个功能。在某些情况下,它会创建一个 kubernetes CronJob 对象而不是常规 部署。这会通过不运行 Deployment Pod 来节省计算资源。

要获取红帽构建的 Apache Camel for Quarkus 的结果,您必须在 src/main/resources/application.properties 中设置以下属性。

quarkus.openshift.deployment-kind=CronJob
quarkus.openshift.cron-job.schedule=<your cron schedule>
camel.main.duration-max-idle-seconds=1

您必须将计时器消费者设置为仅执行一次,如下所示:

from("timer:java?delay=0&period=1&repeatCount=1")

以下是计时器参数:

  • delay=0 :启动没有延迟的消费者。
  • period=1 :仅运行一次 1s。
  • repeatCount=1: Don't 在第一次运行后运行。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.