使用红帽企业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文档。
在上面,您将能够看到技术预览(TP)中支持的所有扩展,以及可供使用的扩展。Quarkus拥有庞大的扩展生态系统,帮助开发人员编写应用程序,如Kafka、Hibernate Reactive、Panache、Spring等。
示例:RHEL上的基本功能
在我们今天的示例中,我们已经创建了一个基本应用程序,可以在轻量级资源高效的RHEL服务器上运行,例如在边缘。这个应用程序做什么?
- 设备将数据发送到MQTT代理。
- Quarkus使用反应式消息传递和通道接收这些消息,处理它们,并在基于浏览器的前端展示它们。数据通过通道实时传入。
- 数据也存储在Postgresql数据库中。
- 前端使用REST和Javascript。
本博客指导开发人员如何在RHEL上使用Podman开发和部署此应用程序。Quarkus能够检测底层容器引擎并为应用程序构建容器,如图2所示。
如果您想跟随或尝试,此应用程序的源代码位于此处。
Podman
红帽企业Linux有一个无守护进程的容器引擎。这是什么意思?RHEL使用Podman作为容器引擎。相比之下,Podman架构允许您在启动容器的用户下运行容器(fork/exec),并且此用户不需要任何root权限。因为Podman具有无守护进程架构,每个运行Podman的用户只能看到和修改自己的容器。没有CLI工具与之通信的公共守护进程。在此处了解更多关于Podman的信息。
我们将在此示例中使用Podman。
启动代理
对于此演示,我们使用Mosquitto代理。Mosquitto轻量级,适用于从低功耗单板计算机到完整服务器的所有设备。我们在此演示中使用它作为基本且简单的MQTT代理。让我们使用Podman启动一个mosquitto实例:
|
|
构建我们的应用程序
假设您有最新的红帽构建的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开发人员构建的,以便轻松、舒适和快速地享受开发应用程序的乐趣。它是一个“为优化开发者乐趣而设计的凝聚平台”。那么开发者将从开发模式中获得什么好处?
- 零配置,实时代码和眨眼间重新加载,您不需要在开发时重新启动开发模式。Quarkus理解!
- 基于标准,但不限于。
- 统一配置。
- 为80%的常见用途简化代码,为20%灵活。
- 无麻烦的原生可执行文件生成。
例如,如果我们更改任何Java文件,我们不需要重新加载整个环境。
如果我们访问url http://localhost:8080/q/dev,您还可以找到一个自RHBQ 1.11版本以来可用的出色开发者控制台。
您应该看到以下扩展,点击SmallRye反应式消息传递“通道”,如图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备忘单,Quarkus参考卡。
- 介绍Quarkus,下一代Java框架。