asp.net core 使用HttpClientFactory Polly实现熔断降级
前言
在NET Core2.1后也是增加更新了很多东西,当然HttpClientFactory更新中的一部分.虽然说HttpClient这个实现了disposable,但使用它的时候用using包装块的方式通常不是最好的选择。处理HttpClient,底层socket套接字不会立即释放。该HttpClient类是未多个请求重复使用而创建的。需要不同的基地址,不同的HTTP 标头和其他对请求个性化操作的场景时,需要动手管理多个HttpClient实例,为了简化HttpClient实例管理,.NET Core 2.1提供了一个新的HTTPClientFactory - 它可以创建,缓存和处理HttpClient实例。
什么是HttpClientFactory
从ASPNET Core开始,Polly与IHttpClientFastory集成。HttpClientFastory是一个简化管理和使用的HttpClientory。用ASP.Net团队的话说:“an opinionated factory for creating HttpClient instances”(一个用于创建HttpClient实例的最佳实践的工厂)
提供命名和配置逻辑HttpClient 对象的中心位置。例如,您可以配置预先配置为访问特定微服务的客户端(服务代理)。
通过委派处理程序HttpClient 并实施基于Polly 的中间件来利用Polly 的弹性策略,对传出中间件的概念进行编码。
HttpClient 已经有了委托处理程序的概念,这些处理程序可以链接在一起用于传出HTTP 请求。您将HTTP 客户端注册到工厂中,并且可以使用Polly处理程序将Polly策略用于Retry,CircuitBreakers 等。
管理生命周期,HttpClientMessageHandlers 以避免在管理HttpClient 自己的生命周期时可能发生的上述问题/问题。
HttpClientFactory简单使用
Startup添加
services.AddHttpClient();
通过IHttpClientFactory创建一个HttpClient对象,后面操作如旧,但是不需要关心其资源释放
using Microsoft.AspNetCore.Mvc;
using System.Net.Http;
using System.Threading.Tasks;namespace HttpClientFactoryPolly.Controllers
{[Route("api/[controller]")][ApiController]public class ValuesController : ControllerBase{private readonly IHttpClientFactory _httpClientFactory;public ValuesController(IHttpClientFactory httpClientFactory){this._httpClientFactory = httpClientFactory;}[HttpGet]public async Task<ActionResult<string>> Get(){var client = _httpClientFactory.CreateClient();var result =await client.GetStringAsync("https://www.microsoft.com/zh-cn/");return result;}}
}
配置HttpClientFactory Polly
这边采用命名客户端演示该栗子(如果应用需要有许多不同的 HttpClient 用法(每种用法的配置都不同),可以视情况使用命名客户端。可以在 HttpClient 中注册时指定命名 Startup.ConfigureServices 的配置。)
Package
PM> Install-package Microsoft.Extensions.Http.Polly
Startup
services.AddHttpClient("github",c=> {c.BaseAddress = new System.Uri("https://api.github.com/");c.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json");c.DefaultRequestHeaders.Add("User-Agent", "HttpClientFactory-Sample");});
[HttpGet("{id}")]
public async Task<ActionResult<string>> Get(int id)
{var request = new HttpRequestMessage(HttpMethod.Get,"repos/aspnet/docs/pulls");var client = _httpClientFactory.CreateClient("github");var response = await client.SendAsync(request);var result =await response.Content.ReadAsStringAsync();return result;
}
重试机制
services.AddHttpClient("github", c =>{c.BaseAddress = new System.Uri("https://api.github.com/");c.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json");c.DefaultRequestHeaders.Add("User-Agent", "HttpClientFactory-Sample");}).AddTransientHttpErrorPolicy(p =>p.WaitAndRetryAsync(3, _ => TimeSpan.FromMilliseconds(600)));
效果如下
熔断降级超时
设置降级策略当出现任何异常返回fallback
设置熔断策略当连续出现异常异常 2 次,熔断 4s;
设置超时策略,请求超时为 1s,超时默认会抛出 TimeoutRejectedException;
效果如下
概要
示例地址:https://github.com/fhcodegit/HttpClientFactoryPolly
asp.net core 使用HttpClientFactory Polly实现熔断降级相关推荐
- 【微服务学习】Polly:熔断降级组件
何为熔断降级 "熔断器如同电力过载保护器.它可以实现快速失败,如果它在一段时间内侦测到许多类似的错误,会强迫其以后的多个调用快速失败,不再访问远程服务器,从而防止应用程序不断地尝试执行可能会 ...
- .NET Core Polly 重试 熔断 降级
Polly是一个弹性和瞬态故障处理库,允许我们以非常顺畅和线程安全的方式来执诸如行重试,断路,超时,故障恢复等策略,其主要功能如下: 重试(Retry) 断路器(Circuit-Breaker) 超时 ...
- 在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务
在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务 https://procodeguide.com/programming/polly-in-aspnet-core ...
- 使用.NetCore 控制台演示 熔断 降级(polly)
1.熔断降级的概念: 熔断:我这里有一根长度一米的钢铁,钢铁的熔点1000度(假设),现在我想用力把这根钢铁折弯,但是人的力有限达不到折弯的点,然后我使用火给钢铁加热,每隔一段时间我就会尝试一下是否能 ...
- Refit结合Polly访问ASP.NET Core Web API
前言 在.NET Core应用中访问ASP.NET Core Web API接口,常用的方式是使用IHttpClientFactory生成HttpClient实例,并通过结合Polly策略,以实现重试 ...
- 如何用 ASP.NET Core 实现熔断和降级?
作者 | 朱钢 责编 | 屠敏 熔断.降级和 AOP 1. 什么是熔断? 熔断常常出现在股市中,是指当股指波幅达到规定的熔断点时,交易所为控制风险采取的暂停交易措施.同样,在程序中也引入了熔断,程序中 ...
- .net core with 微服务 - Polly 熔断降级
在我们实施微服务之后,服务间的调用变的异常频繁.多个服务之间可能是互相依赖的关系.某个服务出现故障或者是服务间的网络出现故障都会造成服务调用的失败,进而影响到某个业务服务处理失败.某一个服务调用失败轻 ...
- 如何在 ASP.NET Core 中使用 HttpClientFactory ?
ASP.Net Core 是一个开源的,跨平台的,轻量级模块化框架,可用它来构建高性能的Web程序,这篇文章我们将会讨论如何在 ASP.Net Core 中使用 HttpClientFactory. ...
- 一次业务网关用ASP.NET Core 2.1重构的小结
目录 前言 统一鉴权 服务限流 路由转发 参数重组 链路跟踪 熔断降级 服务计次 业务指标监控 日志记录 迭代更新 总结 前言 对于API网关,业界貌似对它进行下划分,有下面几个分类/场景. 面向We ...
最新文章
- MVC、MVP和MVVM的优缺点
- 集结阿里云数据库最强阵容 DTCC 2019 八大亮点抢先看
- Android之PowerManagerBatteryManager
- 简单的HBase实践
- linux电脑系统投到电视,教你如何在Linux操作系统下观看电视节目
- dbms数据库管理系统_基本数据库管理系统(DBMS)能力问题和解答
- 农业部部署农业大数据发展工作 评:对农业现代化很重要
- 阿里巴巴中间件在 Serverless 技术领域的探索
- twisted系列教程十三–deferred 中的deferred
- jQuery原理第三天
- mysql password() pam-mysql兼容性_pam_mysql认证ftp虚拟用户账号,且拥有不同的权限
- android系统下多媒体播放
- java string对象名称_java中常见对象——String
- Javascript in one picture
- 语音识别芯片的工作原理和分类
- 斐讯K3路由器TTL快速刷机
- Node.js内存泄漏分析
- MongoDB+MongoVUE安装及入门
- js 如何实现点击一键复制文本
- 化工热力学逸度计算_matlab程序,化工热力学逸度计算_Matlab程序
热门文章
- windows rt_如何在Windows RT上轻松将网站添加到Flash白名单
- 一份详尽的利用 Kubeadm部署 Kubernetes 1.13.1 集群指北
- Nodejs前端服务器压缩图片
- Linux下安装compsoer ,并使用composer安装laravel
- Windows Server 2012 DHCP 服务器中的新功能:故障转移和策略
- android中文api(85)——HorizontalScrollView
- Oracle 10R2 研究--db_file_multiblock_read_count对成本的影响
- 7. 堪比JMeter的.Net压测工具 - Crank 总结篇 - crank带来了什么
- C# 中是否支持 Like 和 ln 条件的参数化查询 ?
- 网关Ocelot功能演示完结,久等了~~~