用HttpClientFactory来实现简单的熔断降级
前言
在2.1之后,有不少新东西,其中HttpClientFactory算是一个。HttpClientFactory涉及的东西也不算少,三四种clients , 请求中间件,与Polly的结合,生命周期等。
Steeltoe的组件升级到2.1后,不少示例代码已经使用HttpClientFactory了。当然这是个题外话。
这里主要讲的是与Polly的结合,来完成简单的熔断降级。在这之前,还是先看看关于HttpClientFactory最简单的用法。
HttpClientFactory的简单使用
用个简单的控制台程序来演示
这里就只是获取一下状态码,没有获取实际的内容。
其实主要的操作就是AddHttpClient,然后通过HttpClientFactory创建一个HttpClient对象,有了HttpClient对象,下面的操作应该就不用多说了。
然后在Main方法调用
Console.WriteLine($"BasicUsage, StatusCode = {BasicUsage().GetAwaiter().GetResult()}");
用法感觉并没有太多的差别。下面来看看与Polly的结合。
HttpClientFactory和Polly的结合
Polly的wiki页面已经有了这两者结合使用的文档了。
https://github.com/App-vNext/Polly/wiki/Polly-and-HttpClientFactory
其实现在对于我们来说,要想对http请求使用Polly的一些特性已经非常的简单了。
我们在使用的时候要添加Microsoft.Extensions.Http.Polly
的Nuget包。
先来看看使用Polly的三种扩展方法
扩展方法 | 说明 |
---|---|
AddTransientHttpErrorPolicy | 主要是处理Http请求的错误,如HTTP 5XX 的状态码,HTTP 408 的状态码 以及System.Net.Http.HttpRequestException异常。 |
AddPolicyHandler | 自定义,和传统定义Polly的方式保持一致 |
AddPolicyHandlerFromRegistry | 从Policy集合(也是自定义的)里面选择自己想要的。 |
后面的操作,是用的AddPolicyHandler。
由于我们要实现熔断降级,所以,我们必不可少的要用到CircuitBreakerPolicy和FallbackPolicy,同时为了方便演示,再加个TimeoutPolicy。
由于涉及到多个Policy,所以我们必须要确定他们的执行顺序!
Polly的wiki页面有个示例,还配了一幅很详细的时序图。
一句话来说就是最先起作用的,还是最后添加的那个。
下面就新建一个API项目,用来演示一下。
修改ConfigureServices方法,具体如下
然后是在控制器去使用。
效果如下
前面几次请求,会因为超时或熔断,从而我们得到的结果是fallback。
过了4秒钟后再请求,由于没有超时,正常拿到了结果,所以熔断器会被reset。
来看看日志
比较清晰的看到了所有的操作。
总结
总体来说,HttpClientFactory还是很不错的。尤其是它可以直接使用Polly相关的特性。
部分示例代码:https://github.com/catcherwong/Demos/tree/master/src/HttpClientFactoryDemo
原文地址:https://www.cnblogs.com/catcher1994/p/9349618.html
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
用HttpClientFactory来实现简单的熔断降级相关推荐
- asp.net core 使用HttpClientFactory Polly实现熔断降级
前言 在NET Core2.1后也是增加更新了很多东西,当然HttpClientFactory更新中的一部分.虽然说HttpClient这个实现了disposable,但使用它的时候用using包装块 ...
- 分布式熔断降级平台aegis
现状 分布式场景中.若服务不稳定,会导致调用方服务也不可用,从而造成雪崩效应.因此要对在原服务不可用时进行熔断降级处理. 分析 熔断降级可以服务端限流.网关限流.客户端限流. 1. 客户端限流:在调用 ...
- Spring Cloud Alibaba基础教程:@SentinelResource注解实现限流控制与熔断降级使用详解
在之前的<使用Sentinel实现接口限流>一文中,我们仅依靠引入Spring Cloud Alibaba对Sentinel的整合封装spring-cloud-starter-alibab ...
- 【微服务学习】Polly:熔断降级组件
何为熔断降级 "熔断器如同电力过载保护器.它可以实现快速失败,如果它在一段时间内侦测到许多类似的错误,会强迫其以后的多个调用快速失败,不再访问远程服务器,从而防止应用程序不断地尝试执行可能会 ...
- 使用.NetCore 控制台演示 熔断 降级(polly)
1.熔断降级的概念: 熔断:我这里有一根长度一米的钢铁,钢铁的熔点1000度(假设),现在我想用力把这根钢铁折弯,但是人的力有限达不到折弯的点,然后我使用火给钢铁加热,每隔一段时间我就会尝试一下是否能 ...
- Sentinel 成为 Spring Cloud 官方推荐的主流熔断降级方案
近日,Sentinel 贡献的 spring-cloud-circuitbreaker-sentinel 模块正式被Spring Cloud社区合并至 Spring Cloud Circuit Br ...
- 什么是服务的熔断降级
很多同学知道我在美团点评负责稳定性保障平台的研发,平台中的功能之一就有服务的熔断降级,提起熔断降级,大家可能熟悉的是Netflix的开源组件Hystrix,但是我们并没有在它的基础上进行二次开发,而是 ...
- Spring Cloud Alibaba 实战 | 第十二篇: 微服务整合Sentinel的流控、熔断降级,赋能拥有降级功能的Feign新技能熔断,实现熔断降级双剑合璧(JMeter模拟测试)
文章目录 一. Sentinel概念 1. 什么是Sentinel? 2. Sentinel功能特性 3. Sentinel VS Hystrix 二. Docker部署Sentinel Dashbo ...
- 不能再让服务这么任性的被访问啦---分布式服务熔断降级限流利器至Hystrix
全文概览 文章目录 为什么需要hystrix 特色功能 项目准备 接口测试 业务隔离 线程隔离 信号量隔离 服务降级 触发条件 不足 服务熔断 服务限流 请求合并 HystrixCollapser 工 ...
最新文章
- 生产指挥调度系统_市安全生产应急救援指挥中心将大型装载机械设备储备信息纳入应急指挥调度系统...
- 小白学习python好还是java好_小白应该学Python还是Java?
- MongoDB 在评论中台的实践
- sersync + rsync 实现文件的实时同步
- 菜鸟要做架构师(一)——如何快速开发中小型系统
- [转] MemCached 的 stats 命令
- 20应用统计考研复试要点(part39)--概率论与数理统计
- 作者:刘松灵(1988-),男,就职于中国人民银行征信中心数据部
- AngularJs学习笔记--directive
- 现在主流人工智能(AI)方法的本质是什么?
- 微信小程序mpvue框架
- Materials Studio教程(中科大)
- 转:马明哲:拥有执行力才能让你强大
- 计算机芯片维修论文,中职院校计算机硬件芯片检测及维修的论文
- 区别: @Secured(), @PreAuthorize() 及 @RolesAllowed()
- 新一代Hive客户端工具:Beeline
- amCharts之柱形图
- 计算机组成原理课后答案(唐朔飞第二版)
- [晕事]今天做了件晕事7
- Sass 变量 $var、@import与Partials