如何开始使用 AWS IoT Core 中的新共享订阅 官方博客 物联网

如何开始使用 AWS IoT Core 中的新共享订阅 官方博客 物联网


快速入门 AWS IoT Core 的新共享订阅功能

关键要点

在本篇文章中,我们将介绍 AWS IoT Core 的共享订阅功能,包括其工作原理、设置步骤,以及如何通过该功能实现负载均衡。共享订阅使多个MQTT会话或消费者可以更有效地接收和处理消息,推动高效的设备间通信。

引言

AWS IoT Core 新增的共享订阅功能提供了负载均衡能力,使多个订阅MQTT会话或消费者能够均匀处理消息。传统的非共享订阅会将所有发布的消息发送给所有订阅者,而共享订阅则会随机将消息发送给其中一个订阅者。在本博文中,我们将展示如何利用 AWS IoT Core 的共享订阅功能,详细说明使用步骤,并演示其负载共享机制。

非共享订阅流共享订阅流

共享订阅在诸如连接汽车解决方案、工业制造、智能家居等领域具有广泛应用。在大量设备向公共主题发布消息的情况下,使用共享订阅可以显著提高处理效率。当一些应用程序需要处理到达的数据时,例如在数据湖中存储、进行机器学习的预测维护、基于位置的应用等,多个慢速应用服务器可以组合在一起处理高速度的数据流。每个组可以通过共享订阅从共享主题中读取数据,从而帮助在服务器之间分配处理负载。

总的来说,负载平衡的共享订阅主题具备以下优势:

基于下游系统健康的负载均衡的高可用消费者,支持可变发布消息负载的消费者基础架构水平扩展,耗时的下游处理减缓消息消费者等。

概述

以下是一个示例设置和消息流的展示。N 辆汽车向公共主题 cars/data 发布数据。该主题有五个订阅者。其中,订阅者 1A 和 1B 属于消费者组 1,而订阅者 2A 和 2B 属于消费者组 2。消费者 3 则是独立的消费者。

共享订阅Shared Subscriptions是基于 MQTT5 标准定义的,支持 MQTT3 和 MQTT5 客户端。该功能不依赖于任何 MQTT 5 特定功能,而是使用了专门保留的主题空间 share。新旧 MQTT3 客户端均可发布或订阅共享订阅。

使用共享订阅时,客户端可以按照以下格式订阅共享订阅主题:

share/{ShareName}/{TopicFilter}

不同的订阅客户端可以在其 SUBSCRIBE 数据包中请求不同的 QoS 级别。如果服务器正在处理 QoS1 消息,但选择的订阅者在收到确认消息即 PubAck之前失去连接,服务器将会把消息重新发送给共享组中的下一个订阅者。如果共享组中的某个订阅者断开连接,消息将被发送给其他订阅者以确保消息的送达。

先决条件

要跟随本博文的步骤,你需要一个 AWS 账户,一个 AWS IoT Core 支持的区域,具备创建 AWS IoT 规则、AWS Lambda 函数、AWS 身份和访问管理 (IAM) 角色和策略,并访问 AWS CloudShell。我们也假定你已经熟悉 Linux bash 命令的基础知识。

实施步骤

了解完此功能的概述后,接下来将逐步展示如何实现使用,此设置过程不超过30分钟。

我们将创建 car1 和 car2 作为发布者,consumer group2 下的订阅者 2A、2B,以及独立的 consumer3 作为订阅者请参见上面的架构图。借助共享订阅功能,当消息发布到 consumer group2 时,只有一个订阅者在我们的示例中为 2A 或 2B会随机接收到消息。同时,consumer3 将会接收到所有消息。

步骤 1:使用 AWS CLI 或 AWS 控制台创建 IoT 设备 car1 car2 subscriber2A subscriber2B 和 consumer3。如果你不熟悉如何创建虚拟设备,请参考此 文档 进行逐步指导。

输出:

请参考以下文件夹结构

步骤 2:创建好虚拟设备后,我们将使用其中一个 mosquitto MQTT 客户端在这种情况下为 Eclipse Mosquitto来发布和订阅消息。请参考此 文档 中的步骤下载和安装客户端。我们将使用五个终端来验证此用例。发布者 car1 和 car2 将向 cars/data 主题发布消息,而 subscriber 2A 和 subscriber 2B 将订阅主题 share/group2/cars/data。打开终端并在不同终端中运行各自的命令。consumer3 不属于任何组,直接订阅主题 cars/data。

设置 IoT 终端的环境变量:

如果你使用的是 nix 操作系统,如 Mac、Ubuntu、Redhat 等,请运行以下命令。在运行命令之前,请确保已经安装 jq 库。

endpoint=aws iot describeendpoint endpointtype iotDataATS jq r endpointAddress

vpa加速器

如果使用 Windows,请按照以下命令设置环境变量:

endpoint = aws iot describeendpoint endpointtype iotDataATS jq r endpointAddress

设置订阅者:

终端 1:导航到存放订阅者 2A 证书的文件夹,运行以下命令。

mosquittosub cafile AmazonRootCA1pem cert subscriber2acertificatepem key subscriber2aprivatekey h endpoint p 8883 q 0 t share/group2/cars/data i subscriber2asub tlsversion tlsv12 d V mqttv5

输出:

终端 2:导航到存放订阅者 2B 证书的文件夹,执行以下命令。

mosquittosub cafile AmazonRootCA1pem cert subscriber2bcertificatepem key subscriber2bprivatekey h endpoint p 8883 q 0 t share/group2/cars/data i subscriber2bsub tlsversion tlsv12 d V mqttv5

输出:

终端 3:导航到存放 consumer3 证书的文件夹,运行以下命令。

mosquittosub cafile AmazonRootCA1pem cert consumer3certificatepem key consumer3privatekey h endpoint p 8883 q 0 t cars/data i consumer3sub tlsversion tlsv12 d V mqttv5

输出:

设置发布者:

打开一个新终端,运行以下命令向 cars/data 主题发布数据。为了说明,我们将通过 json 文件发布汽车的速度信息。将以下内容复制并保存到 messagesjson 文件中,位于 cars1 文件夹中。

json{ID car1 speed 75}{ID car1 speed 77}{ID car1 speed 79}

运行以下命令向主题发布数据:

cat messagesjson mosquittopub cafile AmazonRootCA1pem cert car1certificatepem key car1privatekey h ltltIoTendpointgtgt p 8883 q 0 t cars/data i car1 tlsversion tlsv12 d V mqttv5 D publish topicalias 2 l

重复以上步骤,从 car2 文件夹执行相同的操作并观察订阅者的反馈。

输出:

以下输出展示了 consumer3 接收到所有消息,而 subscriber 2A 或 2B 仅接收其中一条消息。

清理

为避免反复收费,请删除在本博文中创建的资源。删除资源的步骤如下:

步骤 1:删除与设备相关的证书。

在 AWS 控制台中,导航到 AWS IoT Core,在左侧面板选择 安全性 证书,删除与 car1、car2、subscriber 2A、2B 和 consumer3 相关的所有证书,点击 操作 删除。

步骤 2:删除创建的 IoT 设备。

在 AWS IoT Core 服务页面,选择 管理 所有设备 设备。选择本次 walkthrough 创建的所有设备并选择删除。

结论

在本篇文章中,你学习了如何快速入门 AWS IoT Core 的共享订阅功能,包括在使用此功能之前需要采取的关键步骤,以及如何通过创建组实现主题订阅者的负载均衡。有关共享订阅的更深入使用指南,请参见 开发者指南。要了解更多 AWS 支持的 MQTT5 特性,请参考 技术文档。

作者

Aditi Gupta

是亚马逊网络服务的高级物联网专家解决方案架构师。她拥有超过18年的经验,为多个政府机构和大型企业设计和开发高度可扩展和可靠的系统。她的兴趣包括大数据、人工智能和机器学习。

如何开始使用 AWS IoT Core 中的新共享订阅 官方博客  物联网

Harish Rajagopalan

是亚马逊网络服务的高级解决方案架构师。Harish 在与企业客户的合作中帮助他们进行云计算之旅。

标签:AWS IoT,AWS IoT Core,AWS IoT MQTTv5,MQTT5

2026-01-27 13:54:05

使用 Amazon CloudWatch 监控 Amazon DynamoDB 操作计数 数据库博客
  • 2026-01-27 12:39:42

使用 Amazon CloudWatch 监控 Amazon DynamoDB 操作计数关键要点在本文中,我们将学习如何使用 Amazon CloudWatch 监控 Amazon DynamoDB ...

将表格从 Microsoft Access 迁移到 Amazon RDS for MySQL 数据库
  • 2026-01-27 14:08:52

从 Microsoft Access 迁移表到 Amazon RDS for MySQL作者:Anant Mittal,2024年2月19日在Amazon RDS上发布,级别:Intermediate...