【问题标题】:Reset Polly Retry count重置 Polly 重试次数
【发布时间】:2019-09-05 15:11:36
【问题描述】:

我已经定义了一个 Polly 策略来在发生异常时执行重试。 该策略定义为

policy = Policy.Handle<ReconnectException>().Retry(retryCount);

我用

调用我的方法
policy.Execute(()=>SendMessageWithRetryPolicy(message));

如何执行重置,以便如果我的 MaxRetryCount 设置为 5 并且消息已在第 3 步成功发送,我还有 5 步要执行?

提前致谢

【问题讨论】:

    标签: polly


    【解决方案1】:

    您无需通过 Polly 重试策略重置调用之间的重试计数。通过策略的每个单独执行都有权获得策略上配置的完整重试计数。

    如果你配置:

    policy = Policy.Handle<ReconnectException>().Retry(retryCount); // where retryCount == 5
    

    然后每次执行通过策略:

    policy.Execute(()=>SendMessageWithRetryPolicy(message));
    

    将有权进行 6 次尝试(1 次初始尝试 + 5 次重试)。如果第一次执行使用 3 次重试,则下一次执行仍有权进行 6 次尝试(1 次初始尝试 + 5 次重试)。

    【讨论】:

    • 感谢您的回复,在我的情况下,polly 负责启动一个始终开启、无休止的循环操作,该操作在 IBM mq 队列上执行侦听,因此我需要重置计数器或查看@不同的接近
    • 通过策略的单次执行并非旨在管理(从外部)长时间运行的无限循环的多次迭代。如果场景是this question 中的计时器触发 lambda,则问题中发布的代码不能作为管理计时器触发的每次迭代的策略。适当的解决方法是在每次迭代中使策略更接近(更紧密地使用它)抛出异常的代码。
    • @advapi 如果您需要一个永不耗尽的 Polly 重试策略,您可以使用 RetryForever 或 WaitAndRetryForever。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-25
    • 1970-01-01
    相关资源
    最近更新 更多