簡體   English   中英

使用設備客戶端向 IoT 中心發送數據的響應緩慢

[英]Slow response sending data to IoT Hub using Device Client

我使用 .NET Web 應用程序作為 IoT 設備和 IoT 中心之間的緩沖區。 IoT 設備將數據發送到 Web 應用,然后 Web 應用將該數據路由到 Azure IoT 中心。 我正在使用設備客戶端來執行此操作。 它運行良好,直到我們投入生產時請求的數量開始增長。

這是將數據發送到 IoT 中心的一小段代碼。

public async Task SendDataToIoTHub(Message eventMessage, string deviceId, string deviceKey)
{
    string connectionString = $"HostName=" + IoTHubHostname + ";DeviceId=" + deviceId + ";SharedAccessKey=" + deviceKey;
    using (DeviceClient deviceClient = DeviceClient.CreateFromConnectionString(connectionString))
    {
        if (deviceClient == null)
        {
            return;
        }

        await deviceClient.SendEventAsync(eventMessage);
    }               
        
} 

我每分鍾大約有 3k-4k 個請求,並且每個請求都會調用上面的代碼。 自從請求率達到這個數量后,它真的開始變得不可靠了。 在短時間內出現“TCP 連接過多”警告,導致整個應用程序開始顯着變慢。

我想知道設備客戶端的這種初始化是否正確,或者是否有更好的方法來做到這一點。

謝謝!

這可以達到最大出站 TCP 連接數。 限制是:

  • 每個 B1/S1/P1 實例 1,920 個連接
  • 每個 B2/S2/P2 實例 3,968 個連接
  • 每個 B3/S3/P3 實例 8,064 個連接
  • 每個 I1/I2/I3 實例 16,000 個連接

來源(這篇文章還展示了如何查看一段時間內的 TCP 連接數)

每次創建新的 DeviceClient 時,您都會打開一個新連接,因此對於這些速率,您會遇到一些限制。 您可以擴展您的實例,但也許您應該考慮為每個設備保留一個 DeviceClient(如果您沒有數千台設備)。

這個“網絡應用程序作為緩沖區”可能是有原因的,如果你想繼續使用它,你可以考慮使用REST API 來發送你的設備事件 如果您只想發送一個事件,則不需要 AMQP 連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM