3.3 运行程序,你将得到 北京市 的天气
{ result: "{"weatherinfo":{"city":"北京","cityid":"101010100","temp":"27.9","WD":"南风","WS":"小于3级","SD":"28%","AP":"1002hPa","njd":"暂无实况","WSE":"<3","time":"17:55","sm":"2.1","isRadar":"1","Radar":"JC_RADAR_AZ9010_JB"}}" }3.4 在微服务中,这种做法很常见,而且非常有用,通过使用类型化的客户端,除了在构造方法中注入 HttpClient 外,我们还可以注入任何需要的东西到 WeatherService 中,更重要的是,可以对业务应用扩展策略,还方便了管理
3.5 在 WeatherService 类型化客户端中,虽然每次都是创建了一个新的 HttpClient 对象,但是其内部的句柄和其它 HttpClient 是共用同一个句柄池,无需担心
4.1 下面说到的策略组件是业内大名鼎鼎的 Polly (波莉),GitHub 地址:https://github.com/App-vNext/Polly
4.2 使用重试策略,参考 Polly 的 Wiki 示例代码,使用起来非常简单
首先需要从 NuGet 中引用包
Polly
Polly.Extensions.Http
4.3 接着在 Startup.cs ConfigureServices 方法中应用策略
public void ConfigureServices(IServiceCollection services) { ... services.AddHttpClient<WeatherService>() .SetHandlerLifetime(TimeSpan.FromMinutes(5)) .AddPolicyHandler(policy => { return HttpPolicyExtensions.HandleTransientHttpError() .WaitAndRetryAsync(3, retryAttempt => TimeSpan.FromSeconds(2), (exception, timeSpan, retryCount, context) => { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("请求出错了:{0} | {1} ", timeSpan, retryCount); Console.ForegroundColor = ConsoleColor.Gray; }); }); }4.4 以上代码表示在请求发生错误的情况下,重试 3 次,每次 2 秒,针对高并发的请求,重试请求间隔建议使用随机值
结语本章着重介绍了 HttpClient 在 Asp.Net Core 中的前世今生,简单介绍了使用原理,介绍了各种使用 HttpClient 的方式
介绍了使用了 Polly 对在类型化的客户端上使用 HttpClient 重试策略,因为对 Polly 理解不够,其它的策略就不再介绍,大家可以到 Polly 的 Wiki 上深入了解
最后通过一个简单的获取天气预报的小实例来演示类型化的客户端使用场景
示例代码下载https://files.cnblogs.com/files/viter/Ron.HttpClientDemo.zip