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

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

1、添加限流

修改 configuration.json 配置文件,对 UpstreamPathTemplate 为 /webapib/values 的配置修改如下:

{

"UpstreamPathTemplate": "/webapib/values",
"UpstreamHttpMethod": [ "Get" ],
"RateLimitOptions": {
"ClientWhiteList": [
"myclient"
],
"EnableRateLimiting": true,
"Period": "1m",
"PeriodTimespan": 30,
"Limit": 2
}
}

对 RateLimitOptions 中几个配置项做下解释:

  • ClientWhiteList:一个字符串数组,在请求头中包含ClientId=xxx的请求不受限流控制,其中ClientId这个key可以修改,后边会介绍,xxx表示配置的白名单。

  • EnableRateLimiting:Boolean值,是否启用限流,只有为true时,配置生效。

  • Period:限流控制的时间段,可以输入 1s(1秒),1m(1分),1h(1小时),1d(1天)类似的值,以此类推。

  • PeriodTimespan:超过限流限制的次数后,需要等待重置的时间(单位是秒)。

  • Limit:在Period时间内最大能访问的数量。
    用一句话描述一下上边的配置:对于除了请求头中包含ClientId=myclient的请求启用限流,1分钟之内该api最多被访问2次,如果已经达到2次,从第2次请求结束起30秒后才能进行下一次访问。
    分别运行WebApiB和OcelotGetWay,使用Postman以get方式请求链接http://localhost:5000/webapib/values,如下所示:
    640?wx_fmt=other

    640?wx_fmt=other再看一下未达到限制的response header和达到限制的response header:

    640?wx_fmt=other可以看到在未达到限制时的header会返回前面配置的Perid和剩余请求次数。
    640?wx_fmt=other
    在达到限制时的header会返回剩余多长时间(秒)重置。
    再次用Postman以get的方式请求http://localhost:5000/webapib/values,不过此次要添加header:
    640?wx_fmt=other
    多次请求后同样可以请求到数据,并没有受到限流配置影响。

2、全局配置

同时在全局配置中可以添加一些关于限流的配置来控制是否在response header中返回限流相关的信息,以及限流的返回信息和状态码还有ClientIdHeader。
修改 GlobalConfiguration 如下:

"GlobalConfiguration": {
"ServiceDiscoveryProvider": {
"Host": "localhost",
"Port": 8500
},
"RateLimitOptions": {
"DisableRateLimitHeaders": true,
"QuotaExceededMessage": "Stop request plz!",
"HttpStatusCode": 999,
"ClientIdHeader": "cid"
}
}

重新运行Ocelot Api网关,请求链接如下:

Do not display rate limit headers.png

返回信息中不再包含限流相关信息。

 当达到限流时,返回的信息以及状态码也会根据配置发生变化:

640?wx_fmt=other

细心的同学可能已经发现,在上边的两次请求中都添加了header ClientId=myclient,但是还是受到了限流控制,这是因为我们在上边的全局配置中已经将ClientId修改为cid,修改header信息重新访问,就不会再受到限流控制:

640?wx_fmt=other

相关文章:

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

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

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

  • ocelot 自定义认证和授权

  • eShopOnContainers 知多少[9]:Ocelot gateways

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316706.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信开发必看,使用.Net Core 开发微信跨平台应用

.NET Core 是一个开源通用的开发框架,源码由微软官方和社区共同支持。支持跨平台,即支持在 Window,macOS,Linux 等系统上的开发和部署,并且可以在硬件设备,云服务,和嵌入式/物联网方案中进行使用…

CF1526 D. Kill Anton

CF1526 D. Kill Anton 题意: 给你一个由’A’,‘N’.‘T’,O’四个字符组成的字符串b,现在要求你改变b的顺序得到a,使得a通过移动回到b的步数最多。 每次移动只能移动相邻两项 题解: 官方题解说:最佳情况为相同字符…

ASP.NET Core 3.0预览版体验

目前.NET Core 3.0的版本为.NET Core 3.0 Preview 3,对应ASP.NET Core 3.0 Preview 3。ASP.NET Core 3.0 之后将不再支持.NET Framework,只运行在.NET Core 上面。ASP.NET Core 3.0 现在已经出到了第三个预览版,增加和改进了很多功能。环境准…

C# .net 中 Timeout 的处理及遇到的问题

C# 中 Timeout 的处理前言最近在项目中要实现一个功能,是关于 Timeout 的,主要是要在要在 TCP 连接建立的时间 和 整个请求完成的时间,在这两个时间层面上,如果超出了设置的时间,就抛出异常,程序中断。研究…

[CodeJam 2021 Round 3] Square Free(调整法 / 字典序最小解网络流)

CodeJam 2021 Round3 Square Freeproblemsolutioncodecode-stdproblem 神奈子是个很爱打麻将的老婆婆,有一天她把她的麻将放进了一个 nmn\times mnm 的网格图里,每个麻将可以左斜着放入网格中(如 / ),也可以右斜着&am…

ConsurrentDictionary并发字典知多少?

在上一篇文章你真的了解字典吗?一文中我介绍了Hash Function和字典的工作的基本原理.有网友在文章底部评论,说我的Remove和Add方法没有考虑线程安全问题.https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.dictionary-2?redirectedfromMSDN&viewn…

ASP.NET Core 基于JWT的认证(二)

上一节我们对 Jwt 的一些基础知识进行了一个简单的介绍,这一节我们将详细的讲解,本次我们将详细的介绍一下 Jwt在 .Net Core 上的实际运用。.Net Core 2.2Visual Studio 2017ASP.NET Core WebAPI2在上一篇文章中,我们详细的介绍了JWT的知识,这…

Docker最全教程之Go实战,墙裂推荐(十九)

前言与其他语言相比,Go非常值得推荐和学习,真香!为什么?主要是可以直接编译成机器代码(性能优越,体积非常小,可达10来M,见实践教程图片)而且设计良好,上手门槛…

你注意到 .Net Framework 和 .Net Core 中使用 Session 的区别了吗?

在测试一个例子时发现的问题,这个示例实现的功能是刷新页面也能保持表格锁定列的状态,先看下页面的完成效果:测试中发现,几乎相同的代码:在 FineUIMvc(Net Framework)下没有问题:htt…

一键发布部署vs插件[AntDeploy]开源了

deploy to remote server by one button click功能支持docker一键部署(支持netcore)支持iis一键部署(支持netcore和framework)(支持增量发布)(支持一键回滚)(支持点火)支持windows服务一键部署(支持netcore和framework)(支持增量发布)(支持一键回滚) 使用插件前我要发布一个net…

【学习笔记】平等博弈及常见的公平博弈类型

文章目录平等博弈nim堆SG定理nim和常见的公平博弈模型bash博弈nim博弈nim-k博弈wythoff博弈扩展wythoff博弈fibonacci博弈阶梯博弈green hackenbushMisre Nim博弈Every-SGnim积翻棋子游戏游戏的积,tartan定理平等博弈 G{L∣R},LRG\{L|R\},LRG{L∣R},LR,所…

Excel催化剂开源第31波-pdf相关功能实现及类库介绍

在Excel催化剂刚推出的pdf相关功能中,反馈很热烈,不止是用户层面好多人喜欢,也听到在.NET开发群里有询问pdf在winform上展现的功能诉求,一段时间没写开源篇,生怕大家以为Excel催化剂太小气了,不再开发了&am…

[小技巧]ASP.NET Core中如何预压缩静态文件

原文地址:Pre-compressed static files with ASP.NET Core作者:Gunnar Peipman译者:Lamond Lu译文:https://www.cnblogs.com/lwqlun/p/10552131.html示例代码:https://github.com/lamondlu/CompressedStaticFileSample…

【学习笔记】简单的连通性状压DP——插头DP(不学以为是天书)

文章目录哈希链表插头DP概念括号表示法 / 最小表示法例题洛谷插头dp板题CITYParkIITonys TourEfficient Tree[CQOI2015]标识设计哈希链表 众所周知,哈希是有冲突的可能性的,而且在状态数越多,冲突的概率就越高。目前掌握的处理方案有多哈希&…

[NewLife.XCode]实体类详解

NewLife.XCode是一个有10多年历史的开源数据中间件,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含多年开发经验于其中。开源地址:https://github.com/…

Counting Triangles

Counting Triangles 题意: 给你一个完全图,每个边被赋值为0或1,问这个完全图中有多少个完美三角形? 完美三角形定义:三角形的三边都为0或1 题解: 正着求不好求,我们可以倒着想 不考虑完美&a…

程序员过关斩将--论商品促销代码的优雅性

点击上方蓝色字体,关注我们菜菜哥,YY说你帮她解决了几个问题,也帮我解决一个呗原来是D妹子,来坐我身边,说下情况我的项目是个电商项目,现在产品狗要给商品做活动正常呀我一个新手初来咋到顶不住压力了&…

Math(牛客多校第三场)

Math 题意&#xff1a; 问你有多少对(x,y),1<x<y<n,满足(x2 y2)%(xy1) 0 题解&#xff1a; 这种题。。。直接打表芜湖~ 通过打表发现&#xff1a;满足情况的为(i,i * i * i),但是也有不和谐的声音出现&#xff1a;当x8时&#xff0c;会出现两个&#xff0c;一个…

[NewLife.XCode]增删改查入门

NewLife.XCode是一个有10多年历史的开源数据中间件&#xff0c;由新生命团队(2002~2019)开发完成并维护至今&#xff0c;以下简称XCode。整个系列教程会大量结合示例代码和运行日志来进行深入分析&#xff0c;蕴含多年开发经验于其中。开源地址&#xff1a;https://github.com/…

在实际项目中使用LiteDB NoSQL数据库

LiteDB 是一个 NoSQL 数据库&#xff0c;特点是 MongoDB like 和 0 配置。100% 原汁原味的 C# 开发, Release 只有一个 DLL&#xff0c;官方有一下适用场景&#xff1a;移动App&#xff0c;桌面小应用程序&#xff0c;特有的文件格式&#xff0c;小型的 Web 应用&#xff0c;需…