aspnetcore 学习笔记一
aspnetcore 个人学习笔记一
在面向服务开发的过程中,服务间经常通过api的方式相互调用,而netcore中封装好了一系列可以简化使用的方法(在Microsoft.Extensions.Http 中)
一、在 ASP.NET Core 中使用 IHttpClientFactory 发出 HTTP 请求
通过配置不同的httpclient客户端,来访问不同的url,比如,可注册和配置 github 客户端,使其访问 GitHub。 可以注册一个默认客户端用于其他用途。
其中包含四种客户端配置方案
二、出站请求中间件
对于多个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
1 2 3 4 5 6 7 8 | 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我理解为出站请求上下文
1 2 3 4 5 6 7 8 | 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方法选用某个或几个策略
1 2 3 4 5 6 7 8 9 10 11 | //注册,策略表服务 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 通过策略表的方式和自定义。添加多个策略。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | //注册,策略表服务 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); |
未完待续................
使用过程中的问题接续......
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步