Azure Iot Hub反馈接收器ReceiveAsync非常慢(15秒),高延迟

问题描述 投票:3回答:2

如果我通过IoT-Hub发送消息(Cloud 2设备):

var serviceMessage= new Message(Encoding.ASCII.GetBytes("Hello Device"));
serviceMessage.Ack = DeliveryAcknowledgement.Full;
commandMessage.MessageId = Guid.NewGuid().ToString();
await serviceClient.SendAsync("myDeviceID", serviceMessage);  //Send message here

并尝试从客户端接收确认:

bool feedbackReceived = false;
while(!feedbackReceived){
  FeedbackReceiver<FeedbackBatch> feedbackReceiver = serviceClient.GetFeedbackReceiver();
  var feedbackBatch = await feedbackReceiver.ReceiveAsync(TimeSpan.FromSeconds(1));
  if(feedbackBatch != null)
    {
      feedbackReceived = feedbackBatch.Records.Any(fm => fm.OriginalMessageId == serviceMessage.MessageId);
      if (feedbackReceived)
        {
          await feedbackReceiver.CompleteAsync(feedbackBatch);
          feedbackReceiver = null;
        }
    }
}

我的客户立即收到消息并发送反馈:

DeviceClient deviceClient = DeviceClient.Create(iotHubUri, new DeviceAuthenticationWithRegistrySymmetricKey(bridgeID, deviceKey), TransportType.Amqp);
Message receivedMessage = await deviceClient.ReceiveAsync();
await deviceClient.CompleteAsync(receivedMessage);

我的云获得反馈最多需要15秒钟的时间。如果我以循环方式发送消息,则第一条消息需要1到15秒的间隔,随后的每个响应都需要15秒。

为什么需要那么长时间?我可以改变吗?我云中的接收方法立即得到了答案:

var incommingMessage = eventHubReceiver.ReceiveAsync();
incommingMessage.Wait();

如果客户端发送消息:

var message = new Message(Encoding.ASCII.GetBytes("My Message"));
await deviceClient.SendEventAsync(message);

整个有问题的项目都在gitHub上:https://github.com/Ben4485/Azure_IotHub_Get_Response

azure response azure-iot-hub
2个回答
3
投票

当然15秒很多。但是,反馈不是单个消息,而是总是包含来自更多设备的更多反馈的批处理(带有反馈数组的JSON文档)。在将它们发送到系统之前,系统可能会尝试获取更多的反馈。

保罗。


0
投票

我正在尝试向设备发送许多命令。但我没有从设备获得任何反馈。设备接受转发命令是否有限制?。

© www.soinside.com 2019 - 2024. All rights reserved.