gpt4 book ai didi

azure - ServiceBus RetryExponential 属性含义

转载 作者:行者123 更新时间:2023-12-04 23:02:59 26 4
gpt4 key购买 nike

我很难理解与 QueueClients 结合使用的 RetryExponential 类(我假设也是 SubscriptionClients)。

属性已列出 here ,但我认为我对他们的描述的解释是不正确的。

这是我的解释...

    var minBackoff = TimeSpan.FromMinutes(5);  // wait 5 minutes for the first attempt?
var maxBackoff = TimeSpan.FromMinutes(15); // all attempts must be done within 15 mins?
var deltaBackoff = TimeSpan.FromSeconds(30); // the time between each attempt?
var terminationTimeBuffer = TimeSpan.FromSeconds(90); // the length of time each attempt is permitted to take?
var retryPolicy = new RetryExponential(minBackoff, maxBackoff, deltaBackoff, terminationTimeBuffer, 10);

在过去的一小时内,我的辅助角色只尝试处理队列中的消息两次,尽管我认为根据上面的配置,它应该更频繁地处理(每 30 秒 + 在前一次尝试期间使用的任何处理时间)最多 90 秒)。我假设这些设置会强制每 2 分钟重试一次。然而,我根本不明白这种解释是如何呈指数的。

我对每个属性的解释(在上面的评论中)是否正确?如果不是(我认为它们不正确),每个属性的含义是什么?

最佳答案

正如您所怀疑的,您包含的值对于这些参数的含义没有意义。以下是我对参数的理解:

  • DeltaBackoff - 用于以指数方式增加重试间隔的时间间隔。
  • MaximumBackoff - 您希望重试之间的最大次数。
  • MaxRetryCount - 系统重试操作的最长时间。
  • MinimalBackoff - 您希望重试之间的最短时间。
  • TerminationTimeBuffer - 系统放弃之前重试操作的最长时间。

它总是会重试最多 maxRetryCount(在您的情况下为 10),除非首先达到终止时间缓冲区限制。

它也不会尝试超过终止时间缓冲区(在您的情况下为 90 秒)的时间,无论它尚未达到最大重试计数。

minBackoff 是您在重试之间等待的最短时间,maxBackoff 是您在重试之间等待的最长时间。

DeltaBackOff 值是每次重试内部将按指数增长的值。请注意,这不是一个准确的时间。它随机选择一个比该时间稍短或稍长的时间,以便所有重试的多个线程不会在完全相同的时间执行此操作。它的随机性有点让人错愕。在第一次实际尝试和第一次重试之间仅存在 minBackOff 间隔。由于您将 deltaBackOff 设置为 30 秒,因此如果进行第二次重试,则大约需要 30 秒加上 minBackOff。第三次重试将是 90 秒加上 minBackOff,每次重试依此类推,直到达到最大退避。

我要确保指出的一件事是,这是一个重试策略,这意味着如果某个操作收到异常,它将遵循此策略再次尝试。如果检索、死信、延迟等操作失败,则将启动此重试策略。这些是针对服务总线的操作,而不是您自己处理中的异常。

我在这一点上可能是错的,但我的理解是,这并不直接与实际接收要处理的消息相关,除非接收调用失败。连续处理是通过 Receive 方法和您自己的代码循环或通过使用 OnMessage 操作(在幕后也使用 Receive)来处理的。只要实际尝试接收时没有出现错误,则不会应用此重试策略。调用接收之间使用的时间间隔可以通过您自己使用需要一定时间跨度的 Receive 方法来设置,也可以通过在创建queueClient 对象之前设置MessagingFactory.OperationTimeout 来设置。如果由于您使用了在 Receive 上提供时间跨度的重载或达到了默认时间跨度而导致接收调用达到等待限制,则只会返回 Null。这不被视为异常(exception),因此重试策略不会生效。

遗憾的是,我认为您必须为实际处理编写自己的指数回退代码。不过,有很多例子。

是的,您可以在 QueueClient 和 SubscriptionClient 上设置此重试策略。

关于azure - ServiceBus RetryExponential 属性含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18499661/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com