使用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文档。
在上面,您将能够看到所有在技术预览(TP)中支持并可用的扩展。Quarkus拥有庞大的扩展生态系统,帮助开发人员编写应用程序,如Kafka、Hibernate Reactive、Panache、Spring等。
示例:RHEL上的基本功能
在我们今天的示例中,我们已经创建了一个基本应用程序,可以在轻量级资源高效的RHEL服务器上运行,例如在边缘。这个应用程序做什么?
- 设备向MQTT代理发送数据。
- Quarkus使用反应式消息传递和通道接收这些消息,处理它们,并在基于浏览器的前端展示它们。数据通过通道实时传入。
- 数据也存储在Postgresql数据库中。
- 前端使用REST和Javascript。
本博客指导开发人员如何在RHEL上使用podman开发和部署此应用程序。Quarkus能够检测底层容器引擎并为应用程序构建容器,如图2所示。
如果您想跟随或尝试,此应用程序的源代码位于此处。
Podman
Red Hat Enterprise Linux有一个无守护进程的容器引擎。这意味着什么?RHEL使用Podman作为容器引擎。相比之下,Podman架构允许您在启动容器的用户(fork/exec)下运行容器,并且此用户不需要任何root权限。因为Podman具有无守护进程架构,每个运行Podman的用户只能查看和修改自己的容器。没有CLI工具与之通信的公共守护进程。在此处了解更多关于Podman的信息。
我们将在整个示例中使用Podman。
启动代理。对于此演示,我们使用Mosquitto代理。Mosquitto轻量级,适用于从低功耗单板计算机到完整服务器的所有设备。我们在此演示中使用它作为基本且简单的MQTT代理。让我们使用podman启动一个mosquitto实例。
|
|
构建我们的应用程序
假设您有最新的Red Hat构建的OpenJDK,即11。您可以通过在终端上启动以下命令来检查您的版本。
|
|
输出:
|
|
所以现在我们有了Java和Mosquitto。让我们尝试启动我们的应用程序。您可以使用任何IDE(集成开发环境)来开发Quarkus。对于大多数IDE,我们有“Quarkus Tools”扩展,使开发人员能够更轻松地创建Quarkus。假设您有您选择的IDE。让我们启动Quarkus“开发模式”。
要做到这一点:
- 打开终端(从您的RHEL机器或任何IDE)
- CD到我们的项目目录,即quarkus-edge-mqtt-demo
- 运行命令“mvn quarkus:dev”
输出应类似,如图3所示:
打开浏览器并导航到http://localhost:8080
您应该能够看到我们应用程序的主页,报告来自我们模拟设备的实时数据,如图4所示。在这种情况下,设备是一个模拟的ESP8266-01,它以JSON格式从设备向MQTT代理抛出温度和热量测量值。然后,这些数据被反应式通道拾取,并在处理后抛出到流中。浏览器读取流并实时显示数据。模拟设备可以轻松更改为真实设备,但抛出的数据应为正确的Json格式。
开发者的喜悦
到目前为止,您已经在RHEL机器上以开发模式运行了一个应用程序。Quarkus是为Java开发人员构建的,以享受轻松、舒适和快速的应用程序开发。它是一个“为优化的开发者喜悦而设计的 cohesive 平台”。那么开发人员将从开发模式中获得什么好处?
- 零配置,实时代码和眨眼间重新加载,您不需要在开发时重新启动开发模式。Quarkus理解!
- 基于标准,但不限于。
- 统一配置
- 为80%的常见用途简化代码,为20%灵活
- 无麻烦的原生可执行文件生成
例如,如果我们更改任何Java文件,我们不需要重新加载整个环境。
如果我们访问url http://localhost:8080/q/dev,您还可以找到一个自RHBQ 1.11版本以来可用的 awesome 开发者控制台。
您应该看到以下扩展,点击SmallRye Reactive messaging “Channels”,如图5所示。
然后您可以看到用于我们边缘设备的反应式流,如图6所示。
有关开发模式的更多详细信息在此处。
使用Podman构建应用程序镜像
您可以通过运行带有“-Pnative”指令的maven来为您的平台创建原生二进制文件。
但是,假设您可能没有完整的编译环境设置,如Mandrel或GraalVM安装。在这种情况下,您也可以使用您的容器运行时构建原生镜像。
最简单的方法是运行以下命令。
|
|
Quarkus将拾取默认容器运行时(例如Podman)。您也可以指定“-Dquarkus.native.container-runtime=podman”来显式选择Podman。构建镜像需要几分钟时间,通过死代码元素、类扫描、反射和构建代理来优化Quarkus应用程序。这不仅针对原生镜像进行优化,也针对JVM模式进行优化。因此,您将在这两种情况下看到快速启动时间和低内存占用,如图7所示。
您还可以通过设置quarkus.native.native-image-xmx配置属性来限制原生编译期间使用的内存量。设置低内存限制可能会增加构建时间。您也可以使用podman创建带有我们二进制文件的容器镜像。
在src/main下,Quarkus为您的应用程序预生成了不同的Dockerfile。在我们的示例中,我们将使用原生版本,因为我们已经创建了原生二进制文件。
在我们的项目主目录中执行以下命令。
|
|
最后,运行以下命令在您的RHEL机器上启动容器。
|
|
返回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