Azure IoT Hub迟到了

时间:2017-12-14 16:51:02

标签: azure iot azure-iot-hub azure-stream-analytics

在我们的Io​​T解决方案中,在服务器端使用Azure IoT Hub,在设备端使用Azure IoT Client SDK,我们看到设备通过MQTT发送状态消息和IoT Hub收到消息之间的间歇性延迟。

在某些情况下,我们看到IoT Hub将消息排队62秒。

例如,下面的消息ID:5cfbe0ac-d987-3317-bda6-f63ec5fe562a

T1-T0 = 62秒

设备时间戳(T0)= 2017-12-13T12:31:12

物联网中心时间戳(T1)= 2017-12-13T12:32:14.3600000Z

问题:

  1. 消息传递到IoT Hub的原因可能是什么原因?

  2. 我们如何进一步挖掘(在内部组件中添加日志以确定延迟的确切位置)?

  3. 有什么建议吗?

  4. 示例物联网中心排队消息:{
       “数据”:{
          “属性”:[
             {
                “代码”:“STS”             “价值”:“1”,}       ]       “类型”:“状态”    },    “邮件ID”: “5cfbe0ac-d987-3317-bda6-f63ec5fe562a”    “协议”: “MQTT”,    “的 DeviceTimestamp ”: “1513168272”,    “EventProcessedUtcTime”: “2017-12-13T12:32:14.0683721Z”,    “的partitionid”:5,    “EventEnqueuedUtcTime”: “2017-12-13T12:32:14.3010000Z”,    “IoTHub”:{
          “的MessageId”:空,       “的correlationID”:空,       “的 EnqueuedTime ”: “2017-12-13T12:32:14.3600000Z”,       “流ID”:空    } }

    更新:设备正在使用Azure Client SDK 1.1.27版。设备代码使用C语言编写。该设备不在防火墙后面或使用任何特殊的网络拓扑,它通过MQTT连接到IoT Hub。通过MQTT发送状态消息时会观察到延迟。

    更新2:设备在使用Azure客户端SDK方法发送消息之前将时间戳添加到消息中。在大多数情况下,时间戳匹配,除非我们看到尖峰,例如以上信息。它使用NTP时间服务器计算时间戳并作为EPOCH发送。物联网中心位于更高层(10个单位)。

    根据我们今天的分析,我们怀疑Azure客户端SDK。我们的假设是,我们认为SDK在尝试与IoT Hub建立连接时在内部(在列表或队列中)存储消息。如果它没有连接到IoT Hub,它会在几秒钟后重试。当它恢复连接时,它会传递存储在其队列中的消息(再次当消息被延迟时,我们看到一堆消息以相同的延迟组合在一起,这证明了这一假设)。

0 个答案:

没有答案