Azure IoT中心AMQP通信复用

Nat*_*n G 5 azure amqp iot azure-eventhub azure-iot-hub

在一些与Azure IoT集线器配合使用的Microsoft文档中,它提到在多个简单设备与本地集线器设备进行通信的情况下,可以在单个TLS连接(使用AMQP协议)下多路复用多个设备的通信。具有足以与IoT中心通信的强大功能。是否有任何示例说明如何实现这种复用?该DeviceClient库似乎并不支持这一(虽然我可能是错的)。还提到了针对这种情况的IoT Gateway SDK,但是我还没有找到一个清晰的示例说明如何使用两者来设置多路复用。任何建议或对其他材料的引用将不胜感激。

小智 5

C#DeviceClient支持使用单个Amqp / TLS连接多路复用多个设备。这是一个使用单个Amqp连接将三个设备连接到IotHub的示例:

             var devices = new Device[3];
             for(int i = 0; i < 3; i++)
             {
                devices[i] = new Device();
                devices[i].Id = Guid.NewGuid().ToString();
                devices[i] = await registryManager.RegisterDeviceAsync(device);
             }

             var deviceClients = new DeviceClient[3];
             for(int i = 0; i < 3; i++)
             {                          
                var auth = new DeviceAuthenticationWithRegistrySymmetricKey(devices[i].Id, devices[i].Authentication.SymmetricKey.PrimaryKey);
                var deviceClients[i] = DeviceClient.Create(
                    <IotHubHostName>,
                    auth,
                    new ITransportSettings[]
                    {
                        new AmqpTransportSettings(Client.TransportType.Amqp_Tcp_Only)
                        {
                            AmqpConnectionPoolSettings = new AmqpConnectionPoolSettings()
                            {
                                Pooling = true,
                                MaxPoolSize = 1
                            }
                        }
                    });
                 await deviceClients[i].OpenAsync()
              }
Run Code Online (Sandbox Code Playgroud)


小智 2

我最近构建了一个这样的架构,也许它可以帮助你作为参考。我们的球员:

  • 现场网关- 足够强大的本地集线器,可以处理与 IoT 中心的通信并从边缘传感器接收数据。
  • 边缘传感器- 无法直接连接到 IoT 中心但实现某些通信协议以使其能够连接到现场网关(Zwave、Zigbee...)的设备。
  • IoT 中心- 处理现场网关和中心之间的 D2C 和 C2D。
  • 后端服务器- 从 IoT 中心接收数据。

边缘传感器将遥测数据发送到现场网关。现场网关维护与 IoT 中心的连接,并且 IoT 中心识别的唯一设备是现场网关。

现场网关从边缘传感器接收到的每个遥测数据在消息负载中都包含一个唯一的 ID。

当 IoT 中心收到消息时,IoT 中心仅了解现场网关。但是,当后端处理消息时,它会从有效负载中获取唯一的 ID,因此知道哪个是发送遥测数据的正确设备。

因此,我们有多个设备都“骑”在一个连接上。

希望它会有所帮助。