.Netcore.NET Core.NET

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

2019-03-15  本文已影响12人  Weidaicheng

本文介绍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 中几个配置项做下解释:

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
返回信息中不再包含限流相关信息。
当达到限流时,返回的信息以及状态码也会根据配置发生变化:
status.png
细心的同学可能已经发现,在上边的两次请求中都添加了header ClientId=myclient,但是还是受到了限流控制,这是因为我们在上边的全局配置中已经将ClientId修改为cid,修改header信息重新访问,就不会再受到限流控制:
cid.png
源码下载

完,下一篇介绍缓存

上一篇下一篇

猜你喜欢

热点阅读