.net core3.1使用API网关Ocelot三:请求缓存与限流 电脑版发表于:2020/8/31 17:13 tn3#Ocelot要实现请求缓存非常的简单一句配置即可 Ocelot目前支持对下游服务的URL进行缓存,并可以设置一个以秒为单位的TTL使缓存过期。我们也可以通过调用Ocelot的管理API来清除某个Region的缓存。 为了在路由中使用缓存,需要在Route中加上如下设置: ``` "FileCacheOptions": { "TtlSeconds": 8 } ``` 这里表示缓存8秒,8秒后过期。在缓存没有过期之前拿到的都是缓存。 我这里就暂时不演示测试了,大家自己去尝试一下即可 在配置文件的配置效果如下:  <br/> tn3#Ocelot限流 (RateLimit) 对请求进行限流可以防止下游服务器因为访问过载而崩溃 Ocelot中限流配置如下: ``` //限流配置 "RateLimitOptions": { "ClientWhitelist": [ "axj" ], // 白名单 "EnableRateLimiting": true, // 是否启用限流 "Period": "10s", // 统计时间段:1s, 5m, 1h, 1d "PeriodTimespan": 10, // 多少秒之后客户端可以重试 "Limit": 5 // 在统计时间段内允许的最大请求数量 } ``` 意思就是10秒内只能请求5次不能在多了,如果超过5次就提示请求过多,然后在隔10分钟在发起请求 在配置文件中的配置效果如下:  #####测试效果如下: 可以看到当在10秒钟内请求超过规定次数就提示请求数量过多  #####当然限流还可以进行全局配置 比如请求超过配置的负载提示的话与返回的状态码都可以进行配置的 ``` //限流全局配置 "RateLimitOptions": { "DisableRateLimitHeaders": false, // Http头 X-Rate-Limit 和 Retry-After 是否禁用 "QuotaExceededMessage": "你的访问过于频繁请稍后在试", // 当请求过载被截断时返回的消息 "HttpStatusCode": 253, // 当请求过载被截断时返回的http status "ClientIdHeader": "client_id" // 用来识别客户端的请求头,默认是 ClientId } ``` #####用postman来测试一下 可以看到当我们填写上client_id是可以无限次数请求的  如果我们去掉,也是会被限流的  <br/> 项目下载: https://download.tnblog.net/resource/index/3e2f58ea38ce44679ee1d28add4c4e2b