1.3. 使用 Camel Extensions for Quarkus 构建第一个项目


1.3.1. 概述

您可以使用 code.quarkus.redhat.com 生成 Quarkus Maven 项目,该项目会自动添加和配置要在应用程序中使用的扩展。

本节介绍了使用 Camel Extensions for Quarkus 创建 Quarkus Maven 项目的过程,包括:

  • 使用 code.quarkus.redhat.com创建框架应用程序
  • 添加简单的 Camel 路由
  • 探索应用程序代码
  • 以开发模式编译应用程序
  • 测试应用程序

1.3.2. 生成框架应用程序

项目可以在 code.quarkus.redhat.com 中引导和生成。Camel Extensions for Quarkus 扩展位于"Integration"标题下。

使用 'search' 字段查找您需要的扩展。

选择您要使用的组件扩展,并点击"Generate your application"来下载基本框架项目。另外,还可以选择将项目直接推送到 GitHub。

有关使用 code.quarkus.redhat.com 生成 Quarkus Maven 项目的更多信息,请参阅 Quarkus 入门指南中的使用 code.quarkus.redhat.com 创建 Quarkus Maven 项目

流程

  1. 使用 code.quarkus.redhat.com 网站,为这个示例选择以下扩展:

    • camel-quarkus-rest
    • camel-quarkus-jackson

      注意

      您不应该按照上述步骤的最后步骤对应用程序进行编译,因为您将作为本指南的一部分执行该任务。

  2. 进入您在上一步中提取生成的项目文件的目录:

    $ cd <directory_name>
    Copy to Clipboard Toggle word wrap

1.3.3. 探索应用程序代码

应用程序有两个编译的依赖关系,这些依赖项在 com.redhat.quarkus.platform:quarkus-camel-bom 中进行管理,这些依赖项在 < dependencyManagement> 中导入:

pom.xml

<quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
<quarkus.platform.group-id>com.redhat.quarkus.platform</quarkus.platform.group-id>
<quarkus.platform.version>
    <!-- The latest 2.13.x version from https://maven.repository.redhat.com/ga/com/redhat/quarkus/platform/quarkus-bom -->
</quarkus.platform.version>

...

<dependency>
    <groupId>${quarkus.platform.group-id}</groupId>
    <artifactId>${quarkus.platform.artifact-id}</artifactId>
    <version>${quarkus.platform.version}</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
<dependency>
    <groupId>${quarkus.platform.group-id}</groupId>
    <artifactId>quarkus-camel-bom</artifactId>
    <version>${quarkus.platform.version}</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
Copy to Clipboard Toggle word wrap

注意

有关 BOM 依赖项管理的更多信息,请参阅使用 Camel Extensions for Quarkus 开发应用程序

应用程序由 src/main/resources/application.properties 中定义的属性进行配置,例如: camel.context.name 可以在此处设置。

1.3.4. 添加简单的 Camel 路由

流程

  1. src/main/java/org/acme/ 子文件夹中创建一个名为 Routes.java 的文件。
  2. 添加 Camel Rest 路由,如以下代码片段所示:

    Routes.java

    package org.acme;
    
    import java.util.Arrays;
    import java.util.List;
    import java.util.Objects;
    import java.util.concurrent.CopyOnWriteArrayList;
    
    import org.apache.camel.builder.RouteBuilder;
    import org.apache.camel.model.rest.RestBindingMode;
    
    import io.quarkus.runtime.annotations.RegisterForReflection;
    
    public class Routes extends RouteBuilder {
        private final List<Fruit> fruits = new CopyOnWriteArrayList<>(Arrays.asList(new Fruit("Apple")));
    
        @Override
        public void configure() throws Exception {
            restConfiguration().bindingMode(RestBindingMode.json);
    
            rest("/fruits")
                    .get()
                    .route()
                    .setBody(e -> fruits)
                    .endRest()
    
                    .post()
                    .type(Fruit.class)
                    .route()
                    .process().body(Fruit.class, (Fruit f) -> fruits.add(f))
                    .endRest();
    
        }
    
        @RegisterForReflection // Let Quarkus register this class for reflection during the native build
        public static class Fruit {
            private String name;
    
            public Fruit() {
            }
    
            public Fruit(String name) {
                this.name = name;
            }
    
            public String getName() {
                return name;
            }
    
            public void setName(String name) {
                this.name = name;
            }
    
            @Override
            public int hashCode() {
                return Objects.hash(name);
            }
    
            @Override
            public boolean equals(Object obj) {
                if (this == obj)
                    return true;
                if (obj == null)
                    return false;
                if (getClass() != obj.getClass())
                    return false;
                Fruit other = (Fruit) obj;
                return Objects.equals(name, other.name);
            }
    
        }
    
    }
    Copy to Clipboard Toggle word wrap

1.3.5. 开发模式

$ mvn clean compile quarkus:dev
Copy to Clipboard Toggle word wrap

此命令编译项目,启动应用程序,并允许 Quarkus 工具监控工作区中的更改。项目中的任何修改都会在正在运行的应用程序中自动生效。

在浏览器中检查应用程序,例如 http://localhost:8080/fruits,用于 rest-json 示例。

如果您更改了应用程序代码,例如,将 'Apple' 更改为 'Orange',则应用程序会自动更新。要查看应用的更改,请刷新浏览器。

有关 开发模式的详情, 请参阅 Quarkus 文档开发模式部分。

1.3.6. 测试

1.3.6.1. JVM 模式

要测试在 JVM 模式中创建的 Camel Rest 路由,请添加测试类,如下所示:

流程

  1. src/test/java/org/acme/ 子文件夹中创建一个名为 RoutesTest.java 的文件。
  2. 添加 RoutesTest 类,如以下代码片段所示:

    RoutesTest.java

    package org.acme;
    
    import io.quarkus.test.junit.QuarkusTest;
    import org.junit.jupiter.api.Test;
    
    import static io.restassured.RestAssured.given;
    import org.hamcrest.Matchers;
    
    @QuarkusTest
    public class RoutesTest {
    
        @Test
        public void testFruitsEndpoint() {
    
            /* Assert the initial fruit is there */
            given()
                    .when().get("/fruits")
                    .then()
                    .statusCode(200)
                    .body(
                            "$.size()", Matchers.is(1),
                            "name", Matchers.contains("Orange"));
    
            /* Add a new fruit */
            given()
                    .body("{\"name\": \"Pear\"}")
                    .header("Content-Type", "application/json")
                    .when()
                    .post("/fruits")
                    .then()
                    .statusCode(200);
    
            /* Assert that pear was added */
            given()
                    .when().get("/fruits")
                    .then()
                    .statusCode(200)
                    .body(
                            "$.size()", Matchers.is(2),
                            "name", Matchers.contains("Orange", "Pear"));
        }
    
    }
    Copy to Clipboard Toggle word wrap

JVM 模式测试在 test Maven 阶段由 maven-surefire-plugin 运行:

$ mvn clean test
Copy to Clipboard Toggle word wrap

1.3.6.2. 原生模式

要测试以原生模式创建的 Camel Rest 路由,请添加测试类,如下所示:

流程

  1. src/test/java/org/acme/ 子文件夹中,创建一个名为 NativeRoutesIT.java 的文件。
  2. 添加 NativeRoutesIT 类,如以下代码片段所示:

    NativeRoutesIT.java

    package org.acme;
    
    import io.quarkus.test.junit.NativeImageTest;
    
    @NativeImageTest
    public class NativeRoutesIT extends RoutesTest {
    
        // Execute the same tests but in native mode.
    }
    Copy to Clipboard Toggle word wrap

    在验证阶段,通过 maven-failsafe-plugin 验证 原生模式测试。

  3. 传递 native 属性来激活运行它们的配置集:

    $ mvn clean verify -Pnative
    Copy to Clipboard Toggle word wrap
提示

如需了解更多详细信息,以及如何使用 CamelTestSupport 测试风格,请参阅 测试 Camel Quarkus 扩展

1.3.7. 打包并运行应用程序

1.3.7.1. JVM 模式

流程

  1. 运行 mvn 软件包,以准备在库存 JVM 上运行的精简 jar

    $ mvn clean package
    $ ls -lh target/quarkus-app
    ...
    -rw-r--r--. 1 user user 238K Oct 11 18:55  quarkus-run.jar
    ...
    Copy to Clipboard Toggle word wrap
    注意

    jar 仅包含应用程序代码。您还需要 target/quarkus-app/lib 中的依赖项来运行它。

  2. 运行 jar,如下所示:

    $ java -jar target/quarkus-app/quarkus-run.jar
    ...
    [io.quarkus] (main) Quarkus started in 1.163s. Listening on: http://[::]:8080
    Copy to Clipboard Toggle word wrap
注意

引导时间应该大约为一秒钟。

1.3.7.2. 原生模式

流程

要准备原生可执行文件,请执行以下操作:

  1. 运行命令 mvn clean package -Pnative

    $ mvn clean package -Pnative
    $ ls -lh target
    ...
    -rwxr-xr-x. 1 user user  46M Oct 11 18:57  code-with-quarkus-1.0.0-SNAPSHOT-runner
    ...
    Copy to Clipboard Toggle word wrap
    注意

    运行程序 没有 .jar 扩展,并且设置了 x (可执行)权限。您可以直接运行:

    $ ./target/*-runner
    ...
    [io.quarkus] (main) Quarkus started in 0.013s. Listening on: http://[::]:8080
    ...
    Copy to Clipboard Toggle word wrap

    应用程序以 13 毫秒开始。

  2. 使用 ps -o rss,command -p $(pgrep code-with) 命令查看内存用量:

    $ ps -o rss,command -p $(pgrep code-with)
      RSS COMMAND
    65852 ./target/code-with-quarkus-1.0.0-SNAPSHOT-runner
    Copy to Clipboard Toggle word wrap

    应用程序使用 65 MB 内存。

提示

有关准备原生可执行文件的更多信息,请参阅 Compiling your Quarkus application to native executables 指南中的 Producing a native executable

提示

Quarkus Native executable 指南 包含更多详细信息,包括 创建容器镜像的步骤

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat