【问题标题】:Does Azure.Devices.Client Retry Policy work on Timeout Exception?Azure.Devices.Client 重试策略是否适用于超时异常?
【发布时间】:2021-09-28 15:28:03
【问题描述】:

我正在使用 Microsoft.Azure.Devices nuget 包通过 AMQP 将数据包发送到 IOT Hub 设备。我还应用了指数重试策略。我的服务工作得很好,但是昨天我收到了关于 SendEventAsync 方法的 System.Timeout 异常。我在服务启动时创建了一个客户端,并使用同一个客户端将消息发送到 IOT 集线器。我认为重试策略不起作用,因为它没有自动刷新连接。我不得不重新启动服务,然后才重新建立连接。我需要捕获超时异常并手动刷新客户端还是重试机制来处理它?

【问题讨论】:

  • 您解决了这个问题吗?您是否更改了 SendEventAsync 方法的任何内容并开始看到此错误?这是暂时性故障还是反复出现?
  • 我没有更改 SendEventAsync 方法的任何内容。我只遇到过一次这个异常,没有再收到类似的错误。

标签: azure amqp azure-iot-hub


【解决方案1】:

默认情况下,SDK 会无限期地重试断开的连接,除非重试策略被覆盖。当由于操作超时引发异常时,内部异常将有OperationCanceledException。由于超时重试操作失败可以解决该错误。查看Retry patterns 文档中的重试策略API了解更多详细信息。

【讨论】:

  • 目前,我应用了自定义 ExponentialBackoff 重试策略。我希望 SDK 无限期地尝试重新连接,那么您是否建议使用默认的重试策略?然而,在另一个例子中,我注意到一个奇怪的行为。在一个实例中,我将最大重试次数设置为一个较高的数字,但该实例没有重新连接。但是,在另一个实例中,我将最大重试次数设置为 5,这会自动重新连接。对这种行为有任何想法吗?
  • "我希望 SDK 无限期地尝试重连,所以您建议使用默认重试策略吗?"是的,有关 SDK 的重试策略以及如何覆盖它的更多信息,请参阅 github.com/Azure/azure-iot-sdk-csharp/blob/master/iothub/device/… 不太确定此行为。关于另一个查询,我不太确定这种行为。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-18
  • 2016-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多