


接上一篇:.net core3.1使用API网关Ocelot三:请求缓存与限流
https://www.tnblog.net/aojiancc2/article/details/4983
熔断的意思是停止将请求转发到下游服务。当下游服务已经出现故障的时候再请求也是徒劳,并且还会增加下游服务器和API网关的负担,类似保险丝。Ocelot熔断使用的是Polly,我们只需要为路由做一些简单配置即可
添加Polly依赖
先下载Polly依赖
install-package Ocelot.Provider.Polly
然后在ConfigureServices中添加Polly的依赖,注意是在AddOcelot()后点出来的
添加熔断配置
"QoSOptions": {
"ExceptionsAllowedBeforeBreaking": 2, // 允许多少个异常请求
"DurationOfBreak": 5000, // 熔断的时间,单位为毫秒
"TimeoutValue": 3000 // 如果下游请求的处理时间超过多少则视如该请求超时
}
这个配置的意思是,3秒算一次超时(TimeoutValue:3000),然后允许的异常请求是2次(ExceptionsAllowedBeforeBreaking:2),如果达到了允许异常请求的上限就触发5秒钟的熔断时间(DurationOfBreak:5000)
如图
修改一下接口方便模拟一下测试
这里我们可以使用传递一个延迟时间的方式来测试,可以很方便的把熔断的方式都测试出来
传递3秒以下的都能被正常的访问到
但是传递3000以上的就会出现服务访问不到的情况
说明熔断的超时配置起作用了
如果只出现一次马上把延迟时间修改为3000以下就会可以马上访问成功,因为还没有达到配置熔断的限制次数所以还可以立即访问到。但是要注意这一次也会访问不到,因为超过了我们设置的超时时间,不要把这一次的超时和触发熔断的时间搞混了,还要注意如果设置超时时间是3000,测试的时候弄成3001,3002这种和超时时间极为接近的时间可能会触发不了,所以测试的时候要适当的把测试时间改大一点
但是当我们尝试让他两次都超时后,就会触发熔断时间,就是你把延迟时间修改为3000以下(模拟接口已经恢复正常了),还是不能被立即访问到。要过5秒后才能重新请求,因为我上面DurationOfBreak配置的是5000
项目下载:
https://download.tnblog.net/resource/index/3e2f58ea38ce44679ee1d28add4c4e2b
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)