【问题标题】:IoT Hub C2D message property overflowing to bodyIoT 中心 C2D 消息属性溢出到正文
【发布时间】:2019-09-24 00:19:07
【问题描述】:

我创建了一个 IoT 中心应用程序,并尝试通过 C# 控制台应用程序使用多个云到设备 (C2D) 消息将 JSON blob 发送到 Android 设备。

我将 JSON blob 拆分为多个字符串,长度为 64000,并在单独的 C2D 消息中发送每个块。我使用 64000 作为字符串的长度,因为字符串的长度等于字节大小(请参阅https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-messages-construct),并且我为额外的属性留了一些空间

每个块都存储为一个属性,如下所示:

 var message = new Message();
 message.MessageId = messageId;
 message.Ack = DeliveryAcknowledgement.Full;

 message.CreationTimeUtc = creationTime;
 message.Properties.Add("type", "EXAMPLE_TYPE");
 message.Properties.Add("example_data_key", chunk);
 message.Properties.Add("checksum", checksum);
 message.Properties.Add("page", pageNumber.ToString());
 message.Properties.Add("page_total", chunks.Count.ToString());

消息已从我的控制台应用程序成功发送,但是当我在我的 Android 设备上(通过 MQTT 协议)收到消息时,在消息正文中找到了 example_data_key 属性中的大量数据,看起来进行 url 编码。

例如,":"3"," 将显示为 %22%3A%223%22%2C%22,但属性中的字符串已正确解码

有什么想法吗?

编辑:忘了提到这仅在我发送非常大的消息时才会发生(例如,长度为 64000 的字符串)。例如,如果我将字符串设置为 32000 长度,那么一切正常。

【问题讨论】:

    标签: c# azure-iot-hub


    【解决方案1】:

    我无法重现您的问题:

    使用 Azure 门户发送 C2D 消息,请参阅以下屏幕 sn-p:

    并且设备(比如我的Azure IoT Hub Tester)收到了一条消息:

    MQTT:
    {
      "Topic": "devices/Device1/messages/devicebound/%24.to=%2Fdevices%2FDevice1%2Fmessages%2FdeviceBound&example_data_key=%22%3A%223%22%2C%22",
      "Timestamp": "2019-09-24T02:24:42.6540481Z",
      "DupFlag": false,
      "QosLevel": 1,
      "Retain": false
    }
    
    Payload:
    123
    

    正如您在上面的主题中看到的,MQTT 订阅者处理程序通过 Azure IoT Hub 以正确编码的格式接收到此属性:

    example_data_key=%22%3A%223%22%2C%22
    

    我确实建议您查看您的 MQTT 库如何处理该主题,或者尝试对该属性值使用 Base64 编码。请注意,size of the message(包含的属性)的最大值为 64k。

    【讨论】:

    • 抱歉,我忘了说只有当我尝试发送一个非常大的属性字符串时才会发生这种情况。例如,如果我将 64000 字符串长度约束更改为 32000,那么一切正常。我的目标是发送尽可能接近最大消息大小的消息,以便我可以最大限度地减少要发送的消息数量。目前,我正在努力寻找一种如何尽可能接近最大尺寸的好方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多