簡體   English   中英

如何從 Azure iot sdk c 獲取“IoT Hub 上的消息總數超過分配的配額”消息

[英]How to get "Total number of messages on the IoT Hub exceeded the allocated quota" message from Azure iot sdk c

我正在使用 Azure iot sdk c,有時我的 iothub 服務可以達到最大配額,我可以看到連接錯誤或后端無法獲取數據,但無法明顯檢查連接錯誤是否是因為達到最大配額。

與此同時,我可以看到來自SDK的以下日志,但不確定上層是否可以收到此消息:

{true,2,NULL,true,* {* {amqp:resource-limit-exceeded,Total number of messages on the IoT Hub exceeded the allocated quota. Increase units for this hub to increase the quota. For more information on quota, please refer to: https://aka.ms/iothubthrottling,{[com.microsoft:tracking-id:6c35054a81b04a5a81ae292a6ab0a7c1-G:0-TimeStamp:03/12/2022 07:46:09],[com.microsoft:is-filtered:true]}}},NULL}

我很想知道應用層是否可以從 ampq 響應中得到這個原因。

您沒有提到您使用的是哪個定價層。 用於計算每日配額的消息大小對於免費層中心為 0.5 KB,對於所有其他層為 4KB。 S1 版本每天能夠接收 400.000 條大小為 4KB 的 D2C 消息,免費層支持 8000 條大小為 0.5 KB 的消息。 發送 C2D 消息和設備配置也是此數量的一部分。

層級和單位數量決定了您可以發送的每日最大消息配額。 有關詳細信息,請參閱IoT 中心配額和限制

我很想知道應用層是否可以從 ampq 響應中得到這個原因。

我建議您檢查Azure IoT 設備 SDK 是否為 C – 有關 IoTHubClient的更多信息,以了解有關消息處理的更多詳細信息。

在任何給定時間,您都可以通過增加 IoT 中心中預配的單元數來增加配額或限制

如果您的消息發送失敗, sendMessageAsync方法會拋出超時異常,除非您實施了某種重試策略(根據文檔 C SDK 不允許自定義重試策略https://learn.microsoft.com/en-us/azure/ iot-hub/iot-hub-reliability-features-in-sdks#retry-patterns )。

SDK 提供三種重試策略:

帶有抖動的指數退避:此默認重試策略在開始時往往很激進,並隨着時間的推移而減慢,直到達到最大延遲。 該設計基於 Azure 架構中心的重試指南。

自定義重試:對於部分SDK語言,你可以設計一個更適合你場景的自定義重試策略,然后注入到RetryPolicy中。 自定義重試在 C SDK 上不可用,目前在 Python SDK 上不支持。Python SDK 根據需要重新連接。

不重試:您可以將重試策略設置為“不重試”,這會禁用重試邏輯。 假設連接已建立,SDK 會嘗試連接一次並發送一次消息。 此策略通常用於具有帶寬或成本問題的場景。 如果選擇此選項,發送失敗的消息將丟失且無法恢復。

自己回答問題。 MS 團隊在 Azure IoT SDK C 的最新版本中添加了支持。這是一個很棒的支持。 欣賞!

暫無
暫無

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

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