在asp.net核心中实现重试策略的最简单方法是什么?这个想法很简单,如果引发某些特定类型的异常(比如sql deadlock),我们最多重试httprequest N次.
我使用中间件进行som自定义身份验证,我不知道中间件是否是这种机制的最佳选择(我是管道架构的新手,我已经读过有几种类型的组件:Singletons,per - 请求等).
更新:这里给出了Sql死锁作为一个例子,我的应用程序只有其中的restful webservices,每个请求都很短,并且完全在Serializable Sql Transaction中运行(没有其他副作用,我无法像发送电子邮件那样回滚或删除文件...).因为我正在使用事务,并且因为我无法保证我的事务将始终以相同的顺序使用表(这取决于谁调用webservices),死锁是不可避免的,所以我需要有一个所有的重试策略httprequest.(问题不是关于交易和死锁,而是如何在asp.net核心中实施重试警察)
您可以使用开箱即用的工具,如Polly.
Polly是一个.NET 3.5/4.0/4.5/PCL库,允许开发人员以流畅的方式表达瞬态异常和故障处理策略,如重试,重试永久,等待和重试或断路器.
在您的特定情况下,示例可能是:
Policy
.Handle<SqlException>(ex => ex.Number == 1205) // sql deadlock
.Retry(3, (exception, retryCount) =>
{
// do something
});
Run Code Online (Sandbox Code Playgroud)
虽然我不确定你的sql死锁和web请求是如何相互关联的.我认为你会重新响应一个http请求以响应http状态代码.例如,以下策略然后添加如何处理这些条件:
Policy
.HandleResult<HttpStatusCode>(HttpStatusCode.InternalServerError)
.OrResult<HttpStatusCode>(HttpStatusCode.BadGateway)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3518 次 |
| 最近记录: |