本文介绍Ocelot中的限流,限流允许Api网关控制一段时间内特定api的总访问次数。
限流的使用非常简单,只需要添加配置即可。
修改 configuration.json
配置文件,对 UpstreamPathTemplate
为 /webapib/values
的配置修改如下:
{
// ...
"UpstreamPathTemplate": "/webapib/values",
"UpstreamHttpMethod": [ "Get" ],
"RateLimitOptions": {
"ClientWhiteList": [
"myclient"
],
"EnableRateLimiting": true,
"Period": "1m",
"PeriodTimespan": 30,
"Limit": 2
}
}
对 RateLimitOptions
中几个配置项做下解释:
同时在全局配置中可以添加一些关于限流的配置来控制是否在response header中返回限流相关的信息,以及限流的返回信息和状态码还有ClientIdHeader。
修改 GlobalConfiguration
如下:
"GlobalConfiguration": {
"ServiceDiscoveryProvider": {
"Host": "localhost",
"Port": 8500
},
"RateLimitOptions": {
"DisableRateLimitHeaders": true,
"QuotaExceededMessage": "Stop request plz!",
"HttpStatusCode": 999,
"ClientIdHeader": "cid"
}
}
重新运行Ocelot Api网关,请求链接如下:
返回信息中不再包含限流相关信息。
当达到限流时,返回的信息以及状态码也会根据配置发生变化:
细心的同学可能已经发现,在上边的两次请求中都添加了header ClientId=myclient,但是还是受到了限流控制,这是因为我们在上边的全局配置中已经将ClientId修改为cid,修改header信息重新访问,就不会再受到限流控制:
作者:Weidaicheng
链接:https://www.jianshu.com/p/f62ca68e26f2
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
.Netcore 2.0 Ocelot Api网关教程(7)- 限流
原文:https://www.cnblogs.com/lhxsoft/p/11724837.html