使用红帽企业Linux(RHEL)随处部署Quarkus

本文详细介绍了如何在红帽企业Linux(RHEL)上部署和运行Quarkus框架,包括开发模式配置、使用Podman构建原生镜像,以及通过MQTT实现实时数据处理的实际示例。

使用红帽企业Linux(RHEL)随处部署Quarkus

Java是过去二十年来使用最广泛的编程语言之一,始终位居前三。Java为跨垂直领域和平台的数百万应用程序提供动力。Linux广泛部署在数据中心、边缘网络和云中。今天,我们宣布为所有红帽企业Linux(RHEL)客户提供Quarkus的可用性。如果您正在运行RHEL,您现在也可以运行红帽构建的Quarkus(RHBQ)。通过这样做,我们使客户、合作伙伴和软件供应商能够轻松地在应用程序中使用RHBQ,并进一步使他们能够在Linux上为Java的多种用例部署Quarkus。如果您在像Openshift这样的Kubernetes平台上开发应用程序,您也可以使用RHBQ,这已于去年宣布。什么是Quarkus,以及如何在RHEL上开发和部署它?在本文中了解更多信息。

什么是红帽构建的Quarkus(RHBQ)

如果您不熟悉Quarkus,它是“超音速亚原子Java”。是的,Java超级快!使用Quarkus,Java变得轻量且直接。

Quarkus是一个Kubernetes原生的Java框架,专为JVM(Java虚拟机)和通过GraalVM/Mandrel进行原生编译而设计。Quarkus专门针对容器优化您的Java代码,并使其成为像Openshift这样的无服务器和云环境的有效平台。Quarkus设计用于与流行的Java标准、框架和库(如Eclipse MicroProfile、Spring、Apache Kafka、RESTEasy(JAX-RS)、Hibernate ORM(JPA)、Spring、Infinispan、Camel等)协同工作。

如何在RHEL上开始使用Quarkus

有多种方法可以在RHEL上开始使用Quarkus。您所需要的是能够从红帽的Maven仓库获取构件。不同方法的列表在此处有文档记录。

对于新手,您可以通过Web浏览器或Maven插件简单地开始使用项目生成器,如图1所示。配置完成后,您可以下载zip文件或复制Maven命令在您的机器上运行。有关不同方法的更多详细信息,您可以在此处查看Quarkus文档。

图1. Quarkus项目生成器

在上面,您将能够看到技术预览(TP)中支持的所有扩展,以及可供使用的扩展。Quarkus拥有庞大的扩展生态系统,帮助开发人员编写应用程序,如Kafka、Hibernate Reactive、Panache、Spring等。

示例:RHEL上的基本功能

在我们今天的示例中,我们已经创建了一个基本应用程序,可以在轻量级资源高效的RHEL服务器上运行,例如在边缘。这个应用程序做什么?

  • 设备将数据发送到MQTT代理。
  • Quarkus使用反应式消息传递和通道接收这些消息,处理它们,并在基于浏览器的前端展示它们。数据通过通道实时传入。
  • 数据也存储在Postgresql数据库中。
  • 前端使用REST和Javascript。

本博客指导开发人员如何在RHEL上使用Podman开发和部署此应用程序。Quarkus能够检测底层容器引擎并为应用程序构建容器,如图2所示。

图2. 高层架构图

如果您想跟随或尝试,此应用程序的源代码位于此处。

Podman

红帽企业Linux有一个无守护进程的容器引擎。这是什么意思?RHEL使用Podman作为容器引擎。相比之下,Podman架构允许您在启动容器的用户下运行容器(fork/exec),并且此用户不需要任何root权限。因为Podman具有无守护进程架构,每个运行Podman的用户只能看到和修改自己的容器。没有CLI工具与之通信的公共守护进程。在此处了解更多关于Podman的信息。

我们将在此示例中使用Podman。

启动代理

对于此演示,我们使用Mosquitto代理。Mosquitto轻量级,适用于从低功耗单板计算机到完整服务器的所有设备。我们在此演示中使用它作为基本且简单的MQTT代理。让我们使用Podman启动一个mosquitto实例:

1
2
3
podman run --name mosquitto \
--rm -p "9001:9001" -p "1883:1883" \
eclipse-mosquitto:1.6.2

构建我们的应用程序

假设您有最新的红帽构建的OpenJDK,即11。您可以通过在终端上启动以下命令来检查您的版本。

1
java -version

输出:

1
2
3
openjdk version "11.0.10" 2021-01-19
OpenJDK Runtime Environment 18.9 (build 11.0.10+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.10+9, mixed mode, sharing)

所以现在我们有了Java和Mosquitto。让我们尝试启动我们的应用程序。您可以使用任何IDE(集成开发环境)与Quarkus一起开发。对于大多数IDE,我们有“Quarkus Tools”扩展,使开发人员能够更轻松地创建Quarkus。假设您有您选择的IDE。让我们启动Quarkus“开发模式”。

要做到这一点:

  • 打开终端(从您的RHEL机器或任何IDE)。
  • CD到我们的项目目录,即quarkus-edge-mqtt-demo。
  • 运行命令“mvn quarkus:dev”。

输出应该类似,如图3所示:

图3. Quarkus开发模式

打开浏览器并导航到http://localhost:8080。您应该能够看到我们应用程序的主页,报告来自我们模拟设备的实时数据,如图4所示。在这种情况下,设备是一个模拟的ESP8266-01,它以JSON格式从设备向MQTT代理抛出温度和热量测量值。然后,这些数据被作为反应式通道拾取,并在处理后抛出到流中。浏览器读取流并实时显示数据。模拟设备可以轻松更改为真实设备,但抛出的数据应为正确的Json格式。

图4. 来自设备的实时数据

开发者的乐趣

到目前为止,您已经在RHEL机器上以开发模式运行了一个应用程序。Quarkus是为Java开发人员构建的,以便轻松、舒适和快速地享受开发应用程序的乐趣。它是一个“为优化开发者乐趣而设计的凝聚平台”。那么开发者将从开发模式中获得什么好处?

  • 零配置,实时代码和眨眼间重新加载,您不需要在开发时重新启动开发模式。Quarkus理解!
  • 基于标准,但不限于。
  • 统一配置。
  • 为80%的常见用途简化代码,为20%灵活。
  • 无麻烦的原生可执行文件生成。

例如,如果我们更改任何Java文件,我们不需要重新加载整个环境。

如果我们访问url http://localhost:8080/q/dev,您还可以找到一个自RHBQ 1.11版本以来可用的出色开发者控制台。

您应该看到以下扩展,点击SmallRye反应式消息传递“通道”,如图5所示。

图5. Quarkus DEV UI

然后您可以看到用于我们边缘设备的反应式流,如图6所示。

图6. 反应式流通道

有关开发模式的更多详细信息在此处。

使用Podman构建应用程序镜像

您可以通过运行带有“-Pnative”指令的Maven来为您的平台创建原生二进制文件。

但是,假设您可能没有完整的编译环境设置,如Mandrel或GraalVM安装。在这种情况下,您也可以使用容器运行时构建原生镜像。

最简单的方法是运行以下命令:

1
./mvnw package -Pnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman

Quarkus将拾取默认容器运行时(例如Podman)。您也可以指定“-Dquarkus.native.container-runtime=podman”来显式选择Podman。构建镜像需要几分钟时间,通过死代码元素、类扫描、反射和构建代理来优化Quarkus应用程序。这不仅优化了原生镜像,还优化了JVM模式。因此,您将在这两种情况下看到快速启动时间和低内存占用,如图7所示。

图7. Quarkus构建过程

您还可以通过设置quarkus.native.native-image-xmx配置属性来限制原生编译期间使用的内存量。设置低内存限制可能会增加构建时间。您也可以使用Podman创建带有我们二进制文件的容器镜像。

在src/main下,Quarkus为您的应用程序预生成了不同的Dockerfile。在我们的示例中,我们将使用原生版本,因为我们已经创建了原生二进制文件。

在我们的项目主目录中执行以下命令:

1
podman build -f src/main/docker/Dockerfile.native -t sshaaf/quarkus-edge-mqtt .

最后,运行以下命令在您的RHEL机器上启动容器:

1
podman run -i –rm -p 8080:8080 sshaaf/quarkus-edge-mqtt

返回http://localhost:8080。然后,您应该看到我们的应用程序运行并显示来自我们设备的传入数据。

总结

Quarkus是适用于多种用例的Java框架。无论您是在边缘网关上运行,还是创建无服务器功能,或在像Kubernetes/OpenShift这样的云环境中部署,Quarkus都提供开发者的轻松和乐趣,为Java应用程序带来云性能,其操作效率使其随处运行节省成本。

在本博客中,我们了解了:

  • RHEL上的Quarkus。
  • 在RHEL上使用Quarkus(RHBQ)。
  • 开发模式。
  • 使用和不使用Podman创建Java原生可执行文件。
  • 在RHEL上使用Podman创建镜像。

有关更多信息和详细信息,请关注以下资源。

资源

  • 发布说明,入门,文档。
  • 想通过示例了解更多关于Quarkus的信息,请点击此处。
  • 书籍《Practising Quarkus》,《Understanding Quarkus》。
  • Quarkus备忘单,Quarkus参考卡。
  • 介绍Quarkus,下一代Java框架。
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计