使用Red Hat Enterprise Linux (RHEL) 随处部署Quarkus

本文详细介绍了如何在Red Hat Enterprise Linux上部署Quarkus框架,包括使用Podman构建容器镜像、开发模式的优势、原生可执行文件的创建,以及通过实际示例展示MQTT数据处理的完整流程。

使用Red Hat Enterprise Linux (RHEL) 随处部署Quarkus

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

什么是Red Hat Build of 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有多种方式。您只需要能够从Red Hat的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

Red Hat Enterprise 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

构建我们的应用程序

假设您有最新的Red Hat构建的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开发人员构建的,以享受轻松、舒适和快速的应用程序开发。它是一个“为优化的开发者喜悦而设计的 cohesive 平台”。那么开发人员将从开发模式中获得什么好处?

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

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

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

您应该看到以下扩展,点击SmallRye Reactive messaging “Channels”,如图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 Cheat Sheet, Quarkus reference card
  • Introducing Quarkus a next Generation Java framework
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计