使用 Azure IoT 中心的消息路由可将遥测数据从 IoT 设备发送到 Azure 服务,例如 Blob 存储、服务总线队列、服务总线主题和事件中心。 每个 IoT 中心都有一个与事件中心兼容的默认内置终结点(消息/事件)。 还可以通过定义路由查询来创建自定义终结点并将消息路由到其他 Azure 服务。 到达 IoT 中心的每个消息都会路由到其路由查询与消息匹配的所有终结点。 如果消息与任何定义的路由查询不匹配,则会将其路由到默认终结点。
将在本教程中执行以下任务:
- 创建 IoT 中心并向其中发送设备消息。
- 创建存储帐户。
- 为存储帐户创建自定义终结点,并从 IoT 中心将消息路由到该终结点。
- 在存储帐户 Blob 中查看设备消息。
先决条件
- Azure 订阅。 如果没有 Azure 订阅,可在开始前创建一个试用帐户。 
- Azure 订阅中的 IoT 中心。 如果还没有 IoT 中心,可以按照 “创建 IoT 中心”中的步骤作。 
- 本教程使用 适用于 .NET 的 Azure IoT SDK 中的示例代码。 - 将 SDK 存储库下载或克隆到开发计算机。
- 在开发计算机上具有 .NET Core 3.0.0 或更高版本。 通过运行 dotnet --version来检查版本并在需要时下载 .NET。
 
- 确保已在防火墙中打开端口 8883。 本教程中的示例使用 MQTT 协议,该协议通过端口 8883 进行通信。 在某些公司和教育网络环境中,此端口可能被阻止。 有关解决此问题的更多信息和方法,请参阅连接到 IoT 中心(MQTT)。 
- (可选)安装 Azure IoT 资源管理器(预览版)。 此工具可帮助你在消息到达 IoT 中心时观察这些消息。 本文使用 Azure IoT 资源管理器。 
注册设备并将消息发送到 IoT 中心
在 IoT 中心注册新设备。
- 登录 Azure 门户,导航到 IoT 中心。 
- 从菜单的“设备管理”部分选择“设备”。 
- 选择“添加设备”。   
- 提供设备 ID,然后选择“保存”。 
- 新设备现在应处于设备列表中。 如果不在该列表中,请刷新页面。 选择设备 ID 以打开设备详细信息页面。 
- 复制其中一个设备密钥并保存。 使用此值配置生成模拟设备遥测消息的示例代码。   
现在你已获得设备 ID 和密钥,可使用示例代码开始将设备遥测消息发送到 IoT 中心。
提示
如果按照本教程的 Azure CLI 步骤进行操作,请在单独会话中运行示例代码。 这样便可以允许示例代码继续运行,同时执行其余 CLI 步骤。
- 如果不是先决条件的一部分,请立即从 GitHub 下载或克隆 用于 .NET 的 Azure IoT SDK 存储库。 
- 从下载或克隆 SDK 的文件夹中,导航到 - azure-iot-sdk-csharp\iothub\device\samples\how to guides\HubRoutingSample文件夹。
- 安装适用于 .NET 的 Azure IoT SDK 和文件中指定的 - HubRoutingSample.csproj必要依赖项:- dotnet restore
- 在所选编辑器中,打开 - Parameters.cs文件。 此文件显示示例支持的参数。 在运行示例时,本文仅使用参数- PrimaryConnectionString。 查看此文件中的代码。 无需任何更改。
- 使用以下命令生成并运行示例代码: - 将 - <myDevicePrimaryConnectionString>替换为 IoT 中心设备中的主连接字符串。- dotnet run --PrimaryConnectionString <myDevicePrimaryConnectionString>
- 随着消息发送到 IoT 中心,你应开始看到消息打印到输出。 在本教程中让该程序保持运行状态。 
配置 IoT 资源管理器以查看消息
配置 IoT 资源管理器以连接到 IoT 中心,并在消息到达内置终结点时读取消息。
首先,检索 IoT 中心的连接字符串。
现在,使用该连接字符串为 IoT 中心配置 IoT 资源管理器。
- 在开发计算机上打开 IoT 资源管理器。 
- 如果已经显示,请选择通过 IoT 中心连接字符串进行连接。   
- 选择“添加连接”。   
- 将中心的连接字符串粘贴到文本框中。 
- 选择“保存”。 
- 连接到 IoT 中心后,你应看到设备列表。 选择为本教程创建的设备 ID。 
- 选择“遥测”。 
- 在设备仍在运行的情况下选择“启动”。 如果设备未运行,则看不到遥测数据。   
- 你应看到来自设备的消息(最新消息显示在顶部)。   - 观看传入消息片刻,以验证是否看到三种不同类型的消息:normal、storage 和 critical。 看到所有三种类型的消息后,可以停止设备。 
这些消息全都到达 IoT 中心的默认内置终结点。 在后续部分中,我们将创建自定义终结点,并基于消息属性将其中一些消息路由到存储。 这些消息在 IoT 资源管理器中停止出现,因为消息仅在消息与 IoT 中心的任何其他路由不匹配时才会转到内置终结点。
设置消息路由
你将基于模拟设备附加到消息的属性将消息路由到不同资源。 未自定义路由的消息会发送到默认终结点(消息/事件)。
本教程的示例应用会向发送到 IoT 中心的每个消息分配 level 属性。 每个消息都随机分配有 normal、storage 或 critical 级别。
第一步是设置将数据路由到的终结点。 第二步是设置使用该终结点的消息路由。 设置路由后,可以在门户中查看终结点和消息路由。
创建存储帐户
在该帐户中创建一个 Azure 存储帐户和一个容器,该帐户包含路由到它的设备消息。
- 在 Azure 门户中,搜索“存储帐户”。 
- 选择“创建”。 
- 为存储帐户提供以下值: - 参数 - 值 - 订阅 - 选择包含 IoT 中心的相同订阅。 - 资源组 - 选择包含 IoT 中心的相同资源组。 - 存储帐户名称 - 为存储帐户提供全局唯一的名称。 - 性能 - 接受默认“标准”值。   
- 可以通过选择“查看 + 创建”来接受所有其他默认值。 
- 验证完成后,选择“创建”。 
- 部署完成后,选择“转到资源”。 
- 在存储帐户菜单中,从“数据存储”部分选择“容器”。 
- 选择“+ 容器”来新建容器。   
- 为容器提供名称,然后选择“创建”。 
路由到存储帐户
现在为存储帐户设置路由。 在本部分中,将定义指向所创建的存储帐户的新终结点。 然后,创建一个筛选 level 属性设置为 storage 的消息的路由,并将这些消息路由到存储终结点。
注意
可将数据以 Apache Avro 格式(默认)或 JSON 格式写入 Blob 存储。
编码格式只能在配置 Blob 存储终结点时设置。 不能更改已设置的终结点的格式。 使用 JSON 编码时,必须在消息系统属性中将 contentType 设置为 JSON,将 contentEncoding 设置为 UTF-8。
若要更详细地了解如何使用 Blob 存储终结点,请参阅有关如何路由到存储的指南。
- 在 Azure 门户中,转到 IoT 中心。 
- 在资源菜单中的“中心设置”下,选择“消息路由”,然后选择“添加”。   
- 在“终结点”选项卡上,通过提供以下信息创建存储终结点: - 参数 - 值 - 终结点类型 - 选择“存储”。 - 端点名称 - 提供此终结点的独一无二的名称。 - Azure 存储容器 - 选择“选取容器”。 按照提示选择在上一部分创建的存储帐户和容器。 - 编码 - 选择“JSON”。 如果此字段灰显,则存储帐户区域不支持 JSON。 在这种情况下,继续使用默认“AVRO”。   
- 接受其余参数的默认值,然后选择“创建 + 下一步”。 
- 在“路由”选项卡上,提供以下信息以创建指向所创建的存储终结点的路由: - 参数 - 值 - 名称 - 为路由创建名称。 - 数据源 - 验证是否从下拉列表中选择了“设备遥测消息”。 - 启用路由 - 验证此字段是否已选中。 - 路由查询 - 输入 - level="storage"作为查询字符串。  
- 选择“创建 + 跳过扩充”。 
查看路由消息
在 IoT 中心创建路由并启用后,它会立即开始将满足其查询条件的消息路由到存储终结点。
使用 IoT 资源管理器监视内置终结点
在开发计算机上返回到 IoT 资源管理器会话。 回想一下,IoT 资源管理器可监视 IoT 中心的内置终结点。 这意味着,现在您应该只看到那些没有通过我们创建的自定义路由传递的消息。
通过运行代码再次启动示例。 观看传入消息片刻,应只看到已 level 设置为 normal 或 critical 的消息。
在存储容器中查看消息
验证消息是否到达存储容器。
- 在 Azure 门户中导航到存储帐户。 
- 从菜单的“数据存储”部分选择“容器”。 
- 选择为本教程创建的容器。 
- 应有一个具有 IoT 中心名称的文件夹。 向下钻取文件结构,直至到达 .json 文件。   
- 选择 JSON 文件,然后选择“下载”以下载 JSON 文件。 确认该文件包含来自你的设备的消息,并且这些消息的 - level属性已设置为- storage。
- 停止运行示例。 
清理资源
如果要移除用于本教程的所有 Azure 资源,请删除资源组。 此操作会一并删除组中包含的所有资源。 如果不想删除整个资源组,请使用 Azure 门户找到并删除各个资源。
如果打算继续学习下一教程,请保留你在此处创建的资源。
- 在 Azure 门户中,导航到包含本教程的 IoT 中心和存储帐户的资源组。
- 查看资源组中的所有资源,以确定要清理的资源。
- 如果要删除所有资源,请选择“删除资源组”。
- 如果只想删除某些资源,请使用每个资源名称旁的复选框选择要删除的资源。 然后选择“删除”。
 
后续步骤
本教程介绍了如何为 Azure 资源创建自定义终结点,然后创建一个路由,以便将设备消息发送到该终结点。 继续学习下一个教程,了解如何使用可用于简化下游处理的额外数据来扩充消息
 
              
              