C# 将iotHub云上的旧消息读取到设备队列

C# 将iotHub云上的旧消息读取到设备队列,c#,node.js,azure-iot-hub,C#,Node.js,Azure Iot Hub,我有一个node.js代码(设备端),用于侦听azure IotHub设备队列上的消息 在下一个场景中: 代码没有运行 已向设备发送消息 代码开始运行并侦听队列 设备没有从队列中读取旧消息,只要我发送新消息,它就会读取 如何更改设备代码以同时收听旧消息?您可以查看本文以了解。从显示IoT Hub中云到设备消息的生命周期状态图中,IoT Hub将云到设备消息持久化到每个设备队列中。设备必须明确确认完成IoT集线器,才能将其从队列中删除。这种方法保证了针对连接和设备故障的恢复能力 在介绍如何为nod

我有一个node.js代码(设备端),用于侦听azure IotHub设备队列上的消息

在下一个场景中:

  • 代码没有运行
  • 已向设备发送消息
  • 代码开始运行并侦听队列
  • 设备没有从队列中读取旧消息,只要我发送新消息,它就会读取


    如何更改设备代码以同时收听旧消息?

    您可以查看本文以了解。从显示IoT Hub中云到设备消息的生命周期状态图中,IoT Hub将云到设备消息持久化到每个设备队列中。设备必须明确确认完成IoT集线器,才能将其从队列中删除。这种方法保证了针对连接和设备故障的恢复能力

    在介绍如何为node.js创建连接的文档中,如果先运行SendCloudToDeviceMessage.js,消息将排队,然后在运行SimulatedDevice.js时(请注意修改了connectCallback函数以使用Complete方法处理消息),客户端将接收消息

    var connectCallback = function (err) {
    if (err) {
      console.log('Could not connect: ' + err);
    } else {
      console.log('Client connected');
      client.on('message', function (msg) {
          console.log('Id: ' + msg.messageId + ' Body: ' + msg.data);
          client.complete(msg, printResultFor('completed'));
        });
      }
    };
    

    这不是预期的行为。设备连接时应接收其队列中的所有消息。查看是否是SDK错误的一个有趣方法是将DEBUG env变量设置为“*”,并查看日志,以确定消息是否由服务发送并被SDK吞并,或者甚至不是由服务发送的。最后,作为一个很好的练习,请考虑在清理秘密之后发布你的代码和日志。