当由于连接池耗尽而收到超时异常时,我们正在尝试为我们的数据库逻辑实施重试策略。当我们在短时间内出现异常大的活动高峰时,就会发生这种情况。我们增加了最大池大小来尝试避免这种情况,但我们也希望将重试逻辑作为备份计划。
连接池的文档指出:
启用连接池后,如果发生超时错误或其他登录错误,将引发异常,随后的连接尝试将在接下来的五秒内失败,即“阻塞期”。如果应用程序在阻塞期内尝试连接,将再次抛出第一个异常。阻塞期结束后的后续故障将导致新的阻塞期是前一个阻塞期的两倍,最长为一分钟。
Polly 似乎很适合解决这个问题,它通过策略包装结合了 Fallback、WaitAndRetry 和 Circuit Breaker 策略。这里有一张很好的照片
理想情况下,我希望能够为断路器指定指数 durationOfBreak 以匹配上述加倍周期。我在网上没有看到任何关于这如何可能的例子,所以也许这是不可能的?
这里所需的配置方法是什么?是否指定一个具有 5 秒 durationOfBreak 的断路器,然后对 5、10、20、40 和 60 秒的 WaitAndRetry 组件使用指数重试?如果连接刚刚变得可用并且您的旧操作刚刚开始等待 40 秒,而新操作将立即起作用,这似乎很不幸。
另一种可能性是有一个 5 秒的 durationOfBreak ,然后让 WaitAndRetry 组件使用一个非常小的等待并进行大量重试,即使我们知道如果这些重试中的许多重试在文档状态之前出现,它们也会失败。
感谢您的反馈!