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
参数的描述:
参数 | 描述 |
---|---|
| 使用 Quarkus 运行时。生成的项目包含 quarkus BOM。 |
|
红帽支持的 quarkus 平台 maven 工件组是 |
| 这是目前支持的最新版本。请参阅 Quarkus 文档中的 最新版本的。 |
| 在 GA 版本中使用 Red Hat Maven 存储库。 |
| 将 quarkus-openshift 依赖项添加到 pom.xml 中,以在 Openshift 中进行构建。 |
| 将 GAV 设置为生成的 pom.xml。您必须为项目相应地设置 GAV。 |
| 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
如果您的 Kamelet
或 KameletBinding
具有如下特征注解: 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 在第一次运行后运行。