簡體   English   中英

Azure sdk Iot HUB DeviceClient 每 10 分鍾重新連接嘗試,MQTT,無操作超時,始終在后台嘗試,無需 RETRY_EXPIRED

[英]Azure sdk Iot HUB DeviceClient reconnect attempt each 10 minutes, MQTT, no operation timeout, always try in background without RETRY_EXPIRED

我有一個低功耗硬件設備,經常遇到 inte.net 連接問題。 默認 DeviceClient 嘗試 4 分鍾(240 秒)重新連接到 inte.net,然后關閉並顯示警告“- 將傳輸狀態更新為新狀態 DISCONNECTED,原因為 RETRY_EXPIRED”

2023-01-10 02:17:22.654 WARN  c.m.a.s.i.d.t.IotHubTransport - Updating transport status to new status DISCONNECTED with reason RETRY_EXPIRED
com.microsoft.azure.sdk.iot.device.exceptions.IotHubClientException: Device operation for reconnection timed out
    at com.microsoft.azure.sdk.iot.device.transport.IotHubTransport.singleReconnectAttempt(IotHubTransport.java:1386)
    at com.microsoft.azure.sdk.iot.device.transport.IotHubTransport.reconnect(IotHubTransport.java:598)
    at com.microsoft.azure.sdk.iot.device.transport.IotHubReconnectTask.run(IotHubReconnectTask.java:69)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
    at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:834) 

此外,重新連接的嘗試是使用默認的 ExponentialBackoffWithJitter 完成的。

c.m.a.s.i.d.t.ExponentialBackoffWithJitter - NOTE: A new instance of ExponentialBackoffWithJitter has been created with the following properties. Retry Count: 2147483647, Min Backoff Interval: 100, Max Backoff Interval: 10000, Max Time Between Retries: 100, Fast Retry Enabled: true 

默認實現每 10 秒嘗試重試一次,這會破壞低硬件設備的性能。 我想在偶爾嘗試之間混合使用,這些嘗試將檢測我是否有 inte.net 但不影響性能

   client = new DeviceClient(iotHubUri, deviceId, sp,IotHubClientProtocol.MQTT);                    
   long minBackoff = 10L * 1000; //10 seconds
   long maxBackoff = 10L * 60 * 1000; //10 minutes
   long deltaBackoff = 100L;
   RetryPolicy retryPolicy = new ExponentialBackoffWithJitter(Integer.MAX_VALUE - 1, minBackoff, maxBackoff, deltaBackoff, true);

   client.setOperationTimeout(115292150000L);
   client.setRetryPolicy(retryPolicy);
   client.open(false);

暫無
暫無

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

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