Polly.dll 使用Polly实现重试策略

// 使用Polly实现重试策略
var policyRetryCount = 0;
var retryPolicy = Policy.Handle<Exception>() // 定义触发重试的异常类型
   .Retry(3, (exception, retryCount) => // 最多重试3次
   {
       LogHelper.Write($"Exception in processing message. Retrying: {retryCount}");
       policyRetryCount += retryCount;
       LogHelper.Write(exception);
       Thread.Sleep(3000);
   });

retryPolicy.Execute(() =>
{
    // 如果成功,则不会触发重试
    var result = ProcessMessage(msg);
    if (result)
    {
        //进行交付,确定此消息已经处理完成
        //channel.BasicAck(e.DeliveryTag, false);
        LogHelper.Write("消息处理成功,确认消息");
    }
    else
    {
        if (policyRetryCount == 3)
        {
            // 消息处理失败,重新入队
            // channel.BasicNack(e.DeliveryTag, false,true);
            LogHelper.Write("消息重试处理 3次失败,重新入队");
        }
        // 如果失败,将触发上面定义的异常处理
        // 例如:ProcessMessage(channel, ea, message);
        throw new Exception("message processing failure"); // 模拟失败
    }
});

};

posted @ 2024-06-21 07:49  .Net菜鸟站  阅读(2)  评论(0编辑  收藏  举报