.net core編寫轉發服務(三) 接入Polly
阿新 • • 發佈:2019-05-13
html cnblogs .html tel syn 響應 ont class quest
在web服務裏面,很常見出現各種問題,需要一些響應的策略,比如服務繁忙的時候,重試,或者重試等待
服務繁忙的時候根據策略即使處理
關於接入Polly我還是沿用之前的代碼,繼續叠代
Web Api用的是FastHttpApi
增加在過濾器裏
public class RetryAttribute: FilterAttribute { private int _count; public RetryAttribute(int count) { _count = count; }public override void Executed(ActionContext context) { try { var policy = Policy .Handle<Exception>() .Retry(_count, (ex, count) => { Console.WriteLine($"Retry Index:{count}, Exception:{ex.Message}"); }); policy.Execute(() => { base.Executed(context); if (context.Exception != null) throw context.Exception; }); } catch(Exception ex) { } } }
在需要過濾的方法上面打上
[Post(Route = "{url}")] [NoDataConvert] [Retry(5)] public async Task<ResponseModel> Service(string url,IHttpContext context) { //略略略 }
我們測試一個不存在的服務
看見了重試了
響應信息如下
這明顯不符合我們的要求,我們希望返回也是一個Model類型的
方便前端處理
修改一下過濾器的Executed
public override void Executed(ActionContext context) { var requestTime = DateTime.Now; try { //略略略 } catch(Exception ex) { context.Result = new ResponseModel { RequestTime = requestTime, ResponseTime = DateTime.Now, IsSuccessFul = false, Data = null, ErrorMessage = ex.Message }; context.Exception = null; } }
再測試一下看看結果
ok~~~
我這裏只是根據簡單場景接入了Polly,同理可以在asp.net core裏面加入,有興趣的小夥伴可以看看
Polly參考Jeffcky的文章http://www.cnblogs.com/CreateMyself/p/7589397.html
還有很多用法,大家可以摸索一下
完整項目源碼
https://github.com/htrlq/ForwardService
.net core編寫轉發服務(三) 接入Polly