目录
在上篇.Net微服务实践(三)[网关]:Ocelot配置路由和请求聚合中我们介绍了Ocelot的配置,主要特性路由以及服务聚合。接下来,我们会介绍Ocelot的限流、熔断、缓存以及负载均衡。
限流
我们先来看限流的配置
Reroute节点中的配置如下:
{
"DownstreamPathTemplate": "/api/orders",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 5001
}
],
"UpstreamPathTemplate": "/api/orders",
"UpstreamHttpMethod": [ "Get" ],
"RateLimitOptions": {
"ClientWhitelist": [],
"EnableRateLimiting": true,
"Period": "10m",
"PeriodTimespan": 3,
"Limit": 1
}
}
GlobalConfiguration中的配置如下:
"GlobalConfiguration": {
"BaseUrl": "http://localhost:5000",
//限流
"RateLimitOptions": {
"QuotaExceededMessage": "您的请求量超过了配额1/10分钟",
"HttpStatusCode": 999
}
}
配置说明
在Reroute和GlobalConfiguration节点中添加了RateLimitOptions节点
- ClientWhitelist - 白名单,也就是不受限流控制的客户端
- EnableRateLimiting - 是否开启限流
- Period & Limit - 在一段时间内允许的请求次数
- PeriodTimespan - 客户端的重试间隔数,也就是客户端间隔多长时间可以重试
- QuotaExceededMessage - 限流以后的提示信息
- HttpStatusCode - 超出配额时,返回的http状态码
示例说明
客户端在10分钟之内只允许请求一次http://localhost:5000/api/orders,在请求之后3秒钟之后可以重试
验证
修改配置,运行示例程序,
访问http://localhost:5000/api/orders,第一次可以正常获取返回结果,再次访时,显示"您的请求量超过了配额1/10分钟, 并且response状态码是999
PeriodTimespan的验证</