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"); // 模拟失败
}
});
};