西红柿炒荷花

aspnetcore 学习笔记一

aspnetcore 个人学习笔记一

  在面向服务开发的过程中,服务间经常通过api的方式相互调用,而netcore中封装好了一系列可以简化使用的方法(在Microsoft.Extensions.Http 中)

  一、在 ASP.NET Core 中使用 IHttpClientFactory 发出 HTTP 请求

  通过配置不同的httpclient客户端,来访问不同的url,比如,可注册和配置 github 客户端,使其访问 GitHub。 可以注册一个默认客户端用于其他用途。

     其中包含四种客户端配置方案

   基本用法

    命名客户端

   类型化客户端

   生成的客户端(结合Refit)

 

 

二、出站请求中间件

对于多个httpclient请求客户端,面向切面形式来围绕http请求进行管理,如缓存、错误处理、序列化和日志处理

三、基于Polly处理故障

 

Polly 以表达策略,例如以流畅且线程安全的方式处理重试、断路器、超时、Bulkhead 隔离和回退。Microsoft.Extensions.Http.Polly NuGet 包中提供 Polly 扩展实现将 Polly 策略用于配置的 HttpClient 实例。 

 

  Polly 添加策略分为三种

 

    1. AddTransientHttpErrorPolicy:是处理Http请求的错误,如HTTP 5XX 的状态码,HTTP 408 的状态码 以及System.Net.Http.HttpRequestException异常

 

    2. AddPolicyHandler:添加自定义策列

 

    3. AddPolicyHandlerFromRegistry:从Policy注册表集合里面选择添加

a. AddTransientHttpErrorPolicy

 services.AddHttpClient<RequestClient>()
    .AddTransientHttpErrorPolicy(builder => builder.WaitAndRetryAsync(3, t => TimeSpan.FromMilliseconds(500)))
    //或。上下都是定义了,错误重试上面是间隔都是500毫秒,下面则定义了每次重试的时间间隔
    .AddTransientHttpErrorPolicy(builder => builder.WaitAndRetryAsync(new[] {
        TimeSpan.FromSeconds(1),
        TimeSpan.FromSeconds(5),
        TimeSpan.FromSeconds(10)
    }));

 

b. AddPolicyHandler

先定义策略,在通过AddPolicyHandler方法添加,改方法接收一个泛型的IAsyncPolicy<HttpResponseMessage>。HttpResponseMessage我理解为出站请求上下文

var retryPolicy = Policy.Handle<HttpRequestException>()
    .OrResult<HttpResponseMessage>(response => {
        //此处实现处理改异常的逻辑
        return true;
    }).WaitAndRetryAsync(3,t => TimeSpan.FromMilliseconds(50));

    services.AddHttpClient<RequestClient>()
    .AddPolicyHandler(retryPolicy);
retryPolicy:发生HttpRequestException的异常,并且OrResult返回结果为true,采用这个策略

c. AddPolicyHandlerFromRegistry
先注册策略表服务,为策略表添加策略,最后通过AddPolicyHandlerFromRegistry方法选用某个或几个策略
 //注册,策略表服务
    var registry = services.AddPolicyRegistry();
    //创建策略
    var retryPolicy = Policy.Handle<HttpRequestException>()
    .OrResult<HttpResponseMessage>(response => {
        //此处实现处理改异常的逻辑
        return true;
    }).WaitAndRetryAsync(3, t => TimeSpan.FromMilliseconds(50));
    registry.Add("registry1", retryPolicy);
    services.AddHttpClient<RequestClient>()
    .AddPolicyHandlerFromRegistry("registry1");

  

添加多个 Polly 处理程序嵌套 Polly 策略以增强功

    分别定义三种策略,timeoutPolicy,noOpPolicy,retryPolicy 通过策略表的方式和自定义。添加多个策略。

 //注册,策略表服务
    var registry = services.AddPolicyRegistry();
    //创建策略
    var timeoutPolicy = Policy.TimeoutAsync<HttpResponseMessage>(10);//10秒超时
    var noOpPolicy = Policy.NoOpAsync().AsAsyncPolicy<HttpResponseMessage>();//有时我们也需要一个没有任何行为的策略,Polly系统默认提供了一个.
    var retryPolicy = Policy.Handle<HttpRequestException>()
    .OrResult<HttpResponseMessage>(response => {
        //此处实现处理改异常的逻辑
        return true;
    }).WaitAndRetryAsync(3, t => TimeSpan.FromMilliseconds(50));
    registry.Add("registry1", retryPolicy);
    registry.Add("registry2", timeoutPolicy);
    services.AddHttpClient<RequestClient>()
    .AddPolicyHandlerFromRegistry("registry1")
    .AddPolicyHandler(retryPolicy)
    .AddPolicyHandler(timeoutPolicy);

  

 

未完待续................

 

 


 


 

使用过程中的问题接续......

posted on 2019-08-02 20:43  西红柿炒荷花  阅读(202)  评论(0编辑  收藏  举报

导航