我们有一个侦听器,它从服务总线队列接收消息,然后将消息正文发送到 API。
我们使用 Polly 来实现云中的弹性,即 DecorlatedJitterBackoffV2 策略。
我们对此策略的担忧是,我们不确定如何计算完成所有重试所需的最长时间,例如何时medianFirstRetryDelay
设置为 500ms,何时retryCount
设置为 3。
这对我们来说很重要,因为服务总线队列上的消息锁定持续时间。我们希望确保锁定持续时间超过完成所有重试所需的时间。
我们有一个侦听器,它从服务总线队列接收消息,然后将消息正文发送到 API。
我们使用 Polly 来实现云中的弹性,即 DecorlatedJitterBackoffV2 策略。
我们对此策略的担忧是,我们不确定如何计算完成所有重试所需的最长时间,例如何时medianFirstRetryDelay
设置为 500ms,何时retryCount
设置为 3。
这对我们来说很重要,因为服务总线队列上的消息锁定持续时间。我们希望确保锁定持续时间超过完成所有重试所需的时间。
重试
如果您用于
DecorrelatedJitterBackoffV2
生成睡眠持续时间,那么您可以迭代结果,因为它是一个IEnumerable
请记住,
TimeSpan
每次方法调用之间生成的 s 可能会有很大差异。我已经生成了五倍的序列,我得到了这些
如果计算每个序列中的时间跨度总和,
delays.Select(t => t.TotalMilliseconds).Sum()
则结果在 1.5 秒到 2.5 秒之间变化(通常)。暂停
您可以通过对其应用本地超时策略来最大化每个操作的持续时间。
在这种情况下,本地意味着以下含义:
TimeoutRejectedException
也会触发让我们算一下
要计算最坏的情况,您可以执行以下操作:
retryCount
为 3,这意味着您有 4 次尝试(初始调用和 3 次重试)如果将超时设置为 1.5 秒,则意味着最坏的情况将在 9 秒内完成(4x 1.5 秒 + 3 秒睡眠)。
当然,如果您在
onTimeout
或 内部执行一些耗时的代码onRetry
,那么也应该将这些代码添加到您的计算中。