Linux 成为处理物联网 (IoT) 边缘应用的热门平台有很多原因。 其中一个主要原因是透明性。 Linux 安全功能构建于开源项目之上,让用户可以透明地了解安全风险和威胁,并能够使用安全模块补丁或内核级更新快速应用修复程序。 Linux 的另一个优势是,开发人员可以选择各种编程语言来开发、测试和运行设备通信,在开发 IoT 边缘应用时可以使用各种网络协议,而不仅仅是 HTTP(s)。 它还使开发人员能够解决服务器编程问题,以控制从 IoT 设备到前端图形用户界面 (GUI) 应用的数据流。
本文介绍了如何使用 Quarkus 开始 IoT 边缘开发,Quarkus 是一个云原生 Java 框架,使您能够集成轻量级的消息代理,以反应式方式处理来自 IoT 设备的数据流。
在本文中,我使用的是 CentOS Stream,我认为它提供了一个可靠的开源平台来处理我从事的业务应用程序,从传统的企业 Java 到云、IoT 边缘、人工智能 (AI) 和机器学习 (ML) 环境。 这是一个介于 Fedora 和 Red Hat Enterprise Linux (RHEL) 之间的中游平台。
[接下来阅读:使用 RHEL 在任何地方部署 Quarkus]

(Daniel Oh, 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,请在继续之前安装 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 处理反应式数据流
对于此示例,假设您有连接到仓库的 IoT 设备,这些设备不断向后端服务器发送温度和热量数据,以监控建筑物的状况并节省电力资源。
您的虚拟设置使用一个 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,特别是 MQTT,IoT 消息传递的标准)进行交互。 此代码片段显示了如何使用 @Incoming()
注解指定传入数据流
@Incoming("devices")
@Outgoing("my-data-stream")
@Broadcast
public String process(byte[] data) {
String d = new String(data);
return d;
}
您可以在我的 GitHub 存储库中找到此解决方案。
步骤 3:监控实时数据通道
Quarkus 使用反应式消息传递和通道来接收、处理和展示带有基于浏览器的前端应用程序的消息。 您可以在开发模式下运行 Quarkus 应用程序以进行实时编码,或在内部循环开发工作流程中继续添加代码。
发出以下 Maven 命令来构建和启动应用程序
./mvnw compile quarkus:dev
一旦您的 Quarkus 应用程序启动,您应该会看到来自 ESP8266-01 设备的传入 IoT 数据。

(Daniel Oh, CC BY-SA 4.0)
您可以使用仪表板来监控 IoT 边缘数据(例如,温度、热量)的处理情况。 打开一个新的 Web 浏览器并导航到 https://#:8080。 您应该开始看到一些统计信息。

(Daniel Oh, CC BY-SA 4.0)
结论
借助 Quarkus,企业可以以最小的成本扩展应用程序开发和部署环境,而无需高昂的维护或许可费用。 从 DevOps 的角度来看,企业开发人员仍然可以使用熟悉的开源技术(例如 Java)来实现 IoT 边缘应用程序,而运维人员可以使用基于 Linux 的系统(例如 CentOS Stream)控制和监控生产,并从大数据、IoT 和人工智能 (AI) 技术中收集数据。
评论已关闭。