1. 程式人生 > >.net core編寫轉發服務(三) 接入Polly

.net core編寫轉發服務(三) 接入Polly

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