时间:2021-05-18
前言
在2.1之后,有不少新东西,其中HttpClientFactory算是一个。HttpClientFactory涉及的东西也不算少,三四种clients , 请求中间件,与Polly的结合,生命周期等。
Steeltoe的组件升级到2.1后,不少示例代码已经使用HttpClientFactory了。当然这是个题外话。
这里主要讲的是与Polly的结合,来完成简单的熔断降级。在这之前,还是先看看关于HttpClientFactory最简单的用法。
HttpClientFactory的简单使用
用个简单的控制台程序来演示
这里就只是获取一下状态码,没有获取实际的内容。
static async Task<string> BasicUsage(){ var serviceCollection = new ServiceCollection(); serviceCollection.AddHttpClient(); var services = serviceCollection.BuildServiceProvider(); var clientFactory = services.GetService<IHttpClientFactory>(); var client = clientFactory.CreateClient(); var request = new HttpRequestMessage(HttpMethod.Get, "https://patibilityVersion.Version_2_1);}然后是在控制器去使用。
[Route("api/[controller]")][ApiController]public class ValuesController : ControllerBase{ private static int myCount = 0; private readonly IHttpClientFactory _clientFactory; public ValuesController(IHttpClientFactory clientFactory) { this._clientFactory = clientFactory; } // GET api/values/timeout [HttpGet("timeout")] public ActionResult<IEnumerable<string>> Timeout() { if (myCount < 3)//模拟超时 { System.Threading.Thread.Sleep(3000); } myCount++; return new string[] { "value1", "value2" }; } // GET api/values [HttpGet("")] public async Task<string> GetAsync() { var client = _clientFactory.CreateClient("cb"); var request = new HttpRequestMessage(HttpMethod.Get, "/api/values/timeout"); var response = await client.SendAsync(request); var content = await response.Content.ReadAsStringAsync(); return content; }}效果如下
前面几次请求,会因为超时或熔断,从而我们得到的结果是fallback。
过了4秒钟后再请求,由于没有超时,正常拿到了结果,所以熔断器会被reset。
来看看日志
比较清晰的看到了所有的操作。
总结
总体来说,HttpClientFactory还是很不错的。尤其是它可以直接使用Polly相关的特性。
部分示例代码: HttpClientFactoryDemo
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
背景之前在实现熔断降级组件时,需要实现一个接口的超时中断,意思是,业务在使用熔断降级功能时,在平台上设置了一个超时时间,如果在请求进入熔断器开始计时,并且接口在
本篇内容:Sentinel对性能的消耗如何Sentinel工作流程源码分析Sentinel熔断降级实现源码分析Sentinel对性能的消耗如何Sentinel统
想降级或者安装指定版本的应用?其实非常简单,今天就教大家如何实现。注意:本教程适用于越狱后的设备。iPhone手机已安装应用如何降级至任意版本?越狱完成后在Cy
什么是SentinelSentinel,中文翻译为哨兵,是为微服务提供流量控制、熔断降级的功能,它和Hystrix提供的功能一样,可以有效的解决微服务调用产生的
Sentinel简介Sentinel是阿里开源的项目,定位为面向分布式服务架构的高可用流量控制组件。主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多