本文介绍Ocelot中的QoS(Quality of Service),其使用了Polly对超时等请求下游失败等情况进行熔断。

1、添加Nuget包

添加 Ocelot.Provider.Polly 到OcelotGetway项目中

2、修改 Startup.ConfigureServices 如下来添加Polly:

services    .AddOcelot(new ConfigurationBuilder()        .AddJsonFile("configuration.json")        .Build())    .AddConsul()    .AddPolly()    .AddCacheManager(x => x.WithDictionaryHandle())    .AddAdministration("/administration", "secret");

3、在WebApiA中添加一个SlowController,并添加如下代码:

using System.Threading.Tasks;using Microsoft.AspNetCore.Mvc;

namespace WebApiA.Controllers{public class SlowController : Controller    {        [Produces("application/json")]        [Route("api/[controller]/[action]")]public async Task<string> GetName()        {            await Task.Delay(6000);return "Jonathan";        }    }}

其中 GetName 延时6秒返回。

4、在configuration.json的 ReRoutes 节点添加一个新的路由来访问刚才添加的api方法

{"DownstreamPathTemplate": "/api/Slow/GetName","DownstreamScheme": "http","DownstreamHostAndPorts": [        {"Host": "localhost","Port": 5001        }      ],"UpstreamPathTemplate": "/GetName","UpstreamHttpMethod": [ "Get" ],"QoSOptions": {"ExceptionsAllowedBeforeBreaking":3,"DurationOfBreak":60000,"TimeoutValue": 1000      }}

其中通过 QoSOptions 对该路由添加QoS,对其中的3个属性解释如下:

  • ExceptionsAllowedBeforeBreaking:发生几次请求异常(比如超时)后进行熔断,该值必须大于0

  • DurationOfBreak:熔断时间(单位:毫秒)

  • TimeoutValue:下游请求超时时间(单位:毫秒,默认90秒)
    用一句话描述上述配置:对http://localhost:5001/api/Slow/GetName请求超过1s将会超时,发生三次超时后保持60s熔断。
    运行WebApiA与OcelotGetway项目,然后请求http://localhost:5000/GetName多次:

    可以看到在前3次请求,Time在1000ms之后返回503,在第四次以后发生熔断,请求后立即(Time在100ms左右)返回503。
    官方文档中说可以只配置 TimeoutValue 而不配置其它两个来达到修改超时时间的功能,如下:

"QoSOptions": {"TimeoutValue":5000}

该配置存在bug,因为如上配置 ExceptionsAllowedBeforeBreaking 将会为0,将会触发Polly配置异常,我已经向Ocelot提交了一个Pull Request来修复该问题,并且已经被合并到主分支中,预计在下一个版本中该问题将不会存在。
如果你现在想修改超时时间,但是又不想使用熔断,可以配置如下:

"QoSOptions": {"ExceptionsAllowedBeforeBreaking":10000,"DurationOfBreak": 1,"TimeoutValue": 1000}

在发生很多次异常才会进行熔断,并且立即从熔断中恢复。

相关文章:

  • .Netcore 2.0 Ocelot Api网关教程(番外篇)- Ocelot v13.x升级

  • .Netcore 2.0 Ocelot Api网关教程(6)- 配置管理

  • .Netcore 2.0 Ocelot Api网关教程(7)- 限流

  • .Netcore 2.0 Ocelot Api网关教程(8)- 缓存

  • 【.NET Core项目实战-统一认证平台】第十六章 网关篇-Ocelot集成RPC服务

  • ocelot 自定义认证和授权

  • eShopOnContainers 知多少[9]:Ocelot gateways

  • 使用Ocelot、IdentityServer4、Spring Cloud Eureka搭建微服务网关:(一)

原文地址:https://www.jianshu.com/p/c7f5f9515962

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

Ocelot Api网关教程(9)- QoS相关推荐

  1. .Netcore 2.0 Ocelot Api网关教程(8)- 缓存

    Ocelot中使用 CacheManager 来支持缓存,官方文档中强烈建议使用该包作为缓存工具. 以下介绍通过使用CacheManager来实现Ocelot缓存. 1.通过Nuget添加 Ocelo ...

  2. .Netcore 2.0 Ocelot Api网关教程(7)- 限流

    本文介绍Ocelot中的限流,限流允许Api网关控制一段时间内特定api的总访问次数. 限流的使用非常简单,只需要添加配置即可. 1.添加限流 修改 configuration.json 配置文件,对 ...

  3. .Netcore 2.0 Ocelot Api网关教程(6)- 配置管理

    本文介绍Ocelot中的配置管理,配置管理允许在Api网关运行时动态通过Http Api查看/修改当前配置.由于该功能权限很高,所以需要授权才能进行相关操作.有两种方式来认证,外部Identity S ...

  4. .Netcore 2.0 Ocelot Api网关教程(番外篇)- Ocelot v13.x升级

    由于Ocelot系列博客好久没更新(差不多有10个月的时间了),在此先说声抱歉,Ocelot系列会继续更新下去. 在写上一篇配置管理的时候发现官方文档已经和以前的不一样,而Ocelot也从5.0版本更 ...

  5. Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权

    在上一讲中,我们已经完成了一个完整的案例,在这个案例中,我们可以通过Angular单页面应用(SPA)进行登录,然后通过后端的Ocelot API网关整合IdentityServer4完成身份认证.在 ...

  6. ASP.NET Core on K8s学习之旅(13)Ocelot API网关接入

    [云原生]| 作者/Edison Zhou 这是恰童鞋骚年的第232篇原创文章 上一篇介绍了Ingress的基本概念和Nginx Ingress的基本配置和使用,考虑到很多团队都在使用Ocelot作为 ...

  7. Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权(三)

    在前面两篇文章中,我介绍了基于IdentityServer4的一个Identity Service的实现,并且实现了一个Weather API和基于Ocelot的API网关,然后实现了通过Ocelot ...

  8. Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权(二)

    上文已经介绍了Identity Service的实现过程.今天我们继续,实现一个简单的Weather API和一个基于Ocelot的API网关. 回顾 <Angular SPA基于Ocelot ...

  9. Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权(一)

    好吧,这个题目我也想了很久,不知道如何用最简单的几个字来概括这篇文章,原本打算取名<Angular单页面应用基于Ocelot API网关与IdentityServer4+ASP.NET Iden ...

最新文章

  1. 8.Spring整合Hibernate_2_声明式的事务管理(Annotation的方式)
  2. php 数组去重_数组去重(JavaScript 为例)
  3. 警告1909。无法创建快捷方式VMware Workstation Pro.Ink。解决方法(附 VMware_workstation 12的安装方法)
  4. python画一个点_pygame学习笔记(2):画点的三种方法和动画实例
  5. PHP+MySQL能做什么?
  6. MySQL数据库迁移到PostgreSQL
  7. 事务管理:事务的状态相关知识笔记
  8. ThreadLocal系列(二)-InheritableThreadLocal的使用及原理解析
  9. 在Android中实现异步任务
  10. MT6580 Android8.1调试移植费恩格尔指纹驱动
  11. JavaScript学习笔记——对表单的操作
  12. 沙箱环境和测试环境区别_带你一图了解iOS应用内购买流程,掌握测试环境搭建与测试方法...
  13. Atitit。 《吠陀》 《梨俱吠陀》overview 经读后感  是印度上古时期一些文献的总称
  14. php的登陆代码,PHP登陆页面完整代码
  15. 【读书笔记】金字塔原理-目录
  16. python如何画贝塞尔曲线_使用Python实现贝塞尔曲线连接多点形成光滑曲线
  17. HyperLynx(三十)高速串行总线仿真(二)
  18. office2016家庭和学生版小型企业版专业版|版本区别
  19. Operator '==' cannot be applied to错误
  20. 修改.lnk文件的后缀

热门文章

  1. Google在Android P中隐藏了真棒的按应用自动旋转功能
  2. roku能不能安装软件_如何阻止假期更改Roku主题
  3. Asia Yokohama Regional Contest 2018 G题 What Goes Up Must Come Down(树状数组求逆序对)
  4. Fish Shell 使用笔记
  5. 微信小程序仿微信SlideView组件slide-view
  6. lintcode 418整数转罗马数字
  7. Llinux 磁盘配额的搭建和常规问题解答
  8. 统计 Github 2021 贡献过的开源项目
  9. .NET Core Runtime vs .NET Framework Runtime
  10. 如何通过 C# kill 指定进程?