使用开源在 Linux 上开始边缘开发
利用 Quarkus 扩展 IoT 应用程序开发和部署环境。
Linux 成为处理物联网 (IoT) 边缘应用的流行平台有很多原因。其中一个主要因素是透明度。 Linux 安全功能建立在开源项目的基础上,为用户提供了安全风险和威胁的透明视图,并使他们能够通过安全模块补丁或内核级更新快速应用修复程序。 Linux 的另一个优势是,开发人员在开发物联网边缘应用程序时,可以选择各种编程语言来开发、测试和运行通过各种网络协议(HTTP 除外)的设备通信。它还使开发人员能够进行服务器编程,以控制从物联网设备到前端图形用户界面(GUI)应用程序的数据流。
本文介绍如何开始使用 Quarkus 进行 IoT 边缘开发,Quarkus 是一个云原生 Java 框架,使您能够集成轻量级消息代理,以响应式方式处理来自 IoT 设备的数据流。
在本文中,我使用 CentOS Stream,我认为它提供了一个可靠的开源平台来处理我所处理的业务应用程序,从传统的企业 Java 到云、物联网边缘、人工智能 (AI) 和机器学习 (ML) )环境。它是在 Fedora 和 Red Hat Enterprise Linux (RHEL) 之间运行的中游平台。
[接下来阅读:使用 RHEL 随处部署 Quarkus]
(丹尼尔·吴,CC BY-SA 4.0)
当然,您不必使用 CentOS 才能使用 Quarkus。但是,如果您想准确地遵循本文,您可以安装 CentOS Stream,这样您在此处阅读的内容与您在屏幕上看到的内容不会有任何差异。
您可以通过阅读我的文章在 VS Code 中使用 Quarkus 编写 Java 来了解有关 Quarkus 的更多信息。
步骤 1:将 IoT 数据发送到轻量级消息代理
要快速启动轻量级消息代理,您可以使用 Eclipse Mosquitto。它是一个实现 MQTT 协议的开源消息代理。 MQTT 跨 IoT 设备(例如低功耗传感器、移动电话、嵌入式计算机和微控制器)处理消息。 Mosquitto 可以安装在各种设备和操作系统平台上,但您也可以在安装容器引擎(例如 Docker)和命令行界面 (CLI) 工具后启动代理容器映像。
我使用 Podman 工具来运行 Linux 容器。与其他容器引擎相比,当您在环境中安装并运行额外的容器引擎时,这可以节省资源(尤其是 CPU 和内存)。如果您尚未安装 Podman,请先安装它,然后再继续。然后使用以下命令运行 Mosquitto 消息代理:
$ podman run --name mosquitto \
--rm -p "9001:9001" -p "1883:1883" \
eclipse-mosquitto:1.6.2
您会看到以下输出:
1619384779: mosquitto version 1.6.2 starting
1619384779: Config loaded from /mosquitto/config/mosquitto.conf.
1619384779: Opening ipv4 listen to socket on port 1883.
1619384779: Opening ipv6 listen socket on port 1883.
第 2 步:使用 Quarkus 处理反应式数据流
对于此示例,假设您将物联网设备连接到仓库,这些设备不断将温度和热量数据发送到后端服务器,以监控建筑物的状况并节省电力资源。
您的假想设置使用一个 ESP8266-01 WiFi 模块,以 JSON 数据格式传输温度和热量数据。该流的 IoT 边缘数据将传输到您计算机上运行的 Mosiquitto 消息代理服务器。
在 Quarkus 上的 Java 应用程序中定义 ESP8266-01 模拟器:
Device esp8266 = new Device("ESP8266-01");
@Outgoing("device-temp")
public Flowable<String> generate() {
return Flowable.interval(2, TimeUnit.SECONDS)
.onBackpressureDrop()
.map(t -> {
String data = esp8266.toString();
return data;
});
}
Quarkus 还使您能够使用 SmallRye Reactive Messaging 扩展来处理数据流和事件源,该扩展可与各种消息传递技术交互,例如 Apache Kafka、AMQP,尤其是 IoT 消息传递标准 MQTT。此代码片段展示了如何使用 @Incoming()
注释指定传入数据流:
@Incoming("devices")
@Outgoing("my-data-stream")
@Broadcast
public String process(byte[] data) {
String d = new String(data);
return d;
}
您可以在我的 GitHub 存储库中找到此解决方案。
第三步:监控实时数据通道
Quarkus 使用反应式消息传递和通道通过基于浏览器的前端应用程序接收、处理和展示消息。您可以在开发模式下运行 Quarkus 应用程序进行实时编码,或者继续在内循环开发工作流程中添加代码。
发出以下 Maven 命令来构建并启动应用程序:
./mvnw compile quarkus:dev
Quarkus 应用程序启动后,您应该会看到来自 ESP8266-01 设备的传入 IoT 数据。
(丹尼尔·吴,CC BY-SA 4.0)
您可以使用仪表板监控物联网边缘数据(例如温度、热量)的处理方式。打开新的 Web 浏览器并导航到 http://localhost:8080。您应该开始看到一些统计数据。
(丹尼尔·吴,CC BY-SA 4.0)
结论
借助 Quarkus,企业可以以最低的成本扩展应用程序开发和部署环境,并且无需支付高昂的维护或许可费用。从DevOps的角度来看,企业开发人员仍然可以使用熟悉的开源技术(例如Java)来实现物联网边缘应用,而运营商可以使用基于Linux的系统(例如CentOS Stream)通过大数据收集的数据来控制和监控生产,物联网和人工智能 (AI) 技术。