C# 4.0 C#处理n次执行重试的最佳方法使用polly将消息发送到队列
我正在使用MassTransit和RabbitMQ将消息发布到队列。 有谁能告诉我,如果没有可用的队列并使用Polly尝试n次,处理异常的最佳方法是什么 以下是我将消息发布到队列的代码:C# 4.0 C#处理n次执行重试的最佳方法使用polly将消息发送到队列,c#-4.0,async-await,rabbitmq,masstransit,polly,C# 4.0,Async Await,Rabbitmq,Masstransit,Polly,我正在使用MassTransit和RabbitMQ将消息发布到队列。 有谁能告诉我,如果没有可用的队列并使用Polly尝试n次,处理异常的最佳方法是什么 以下是我将消息发布到队列的代码: private async Task PublishToQueue(ChangeDetected changeDetected) { _logProvider.Info("Publish to Queue started"); try { await _busContro
private async Task PublishToQueue(ChangeDetected changeDetected)
{
_logProvider.Info("Publish to Queue started");
try
{
await _busControl.Publish(changeDetected);
_logProvider.Info($"ChangeDetected message published to RabbitMq. Message");
}
catch (Exception ex)
{
_logProvider.Error("Error publishing message to queue: ", ex);
throw;
}
}
我可以在quartz.net作业中使用以下代码来实现polly retry吗
//Publish message to queue
Policy
.Handle<Exception>()
.RetryAsync(_configReader.RetryLimit, (exception, count) =>
{
//Do something for each retry
})
.ExecuteAsync(async () =>
{
await PublishToQueue(message);
});
//将消息发布到队列
政策
.Handle()
.RetryAsync(_configReader.RetryLimit,(异常,计数)=>
{
//每次重试都要做些什么
})
.ExecuteAsync(异步()=>
{
等待发布队列(消息);
});
谢谢好吧,这行得通吗?这项政策在其他情况下也行得通。但不确定在将消息发布到队列时如何进行测试。因为传递给publish方法的任何对象似乎都可以工作,而publish方法似乎不会引发任何异常。感谢您的帮助。Hi@mukildephthi该模式当然是可能的(我们正是通过Polly、EasyNetQ、RabbitMQ和我们构建的一些自定义消息传递弹性来实现这种模式的)。不过,如果MassTransit没有通过抛出异常指示任何错误,Polly将无法执行任何操作。关于
发布
如何表示失败,他们的文档说明了什么?我假设publish也没有返回一个值得检查的任务
——如果是,您需要以正常的方式观察任务异常(和/或在Polly中使用ExecuteAsync
变体)。Hi@Mountaintraveler,是的,publish方法返回任务。请用正确的实现更新示例代码好吗?Hi@Mukildephthi我没有Quartz/MassTransit在本地检查特定的实现,但原则上它看起来很好:您建议使用RetryAsync
/ExecuteAsync
应该让Polly处理PublishToQueue(…)中引发的任何异常
。当您尝试该实现时会发生什么?github上的repo包含使用相同模式的异步示例。那么,它是否有效?此策略在其他一些场景中有效。但不确定在将消息发布到队列时如何进行测试。因为传递给publish方法的任何对象似乎都可以工作,而publish方法似乎不会引发任何异常。感谢您的帮助。Hi@mukildephthi该模式当然是可能的(我们正是通过Polly、EasyNetQ、RabbitMQ和我们构建的一些自定义消息传递弹性来实现这种模式的)。不过,如果MassTransit没有通过抛出异常指示任何错误,Polly将无法执行任何操作。关于发布
如何表示失败,他们的文档说明了什么?我假设publish也没有返回一个值得检查的任务
——如果是,您需要以正常的方式观察任务异常(和/或在Polly中使用ExecuteAsync
变体)。Hi@Mountaintraveler,是的,publish方法返回任务。请用正确的实现更新示例代码好吗?Hi@Mukildephthi我没有Quartz/MassTransit在本地检查特定的实现,但原则上它看起来很好:您建议使用RetryAsync
/ExecuteAsync
应该让Polly处理PublishToQueue(…)中引发的任何异常
。当您尝试该实现时会发生什么?github上的repo包含使用相同模式的异步示例。