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