.net core使用ocelot---第四篇 限流熔断
简介
前几篇文章我们陆续介绍如何用asp.net core 创建api网关。
这次我们讨论ocelot的流量限制模块。
什么是流量控制(rate limiting)高端词 限流熔断
*定义流量控制是网络接口控制器限制发送接收的流量以防止dos攻击。
多数apis每秒(每份,或者其他短时间周期)被调用的次数是被限制的,以便保护服务以免过载或者为多数客户端提供高质量的服务。
现在我们看看ocelot是如何实现速度限制的。
这里我用ocelot 3.1.5创建一个示例。
准备
我们创建两个项目并保证能运行。
和往常一样,先创建两个项目。
项目名称 |
项目类型 |
描述 |
apigateway |
asp.net core empty |
示例的入口 |
apiservices |
asp.net core web api |
api服务提供一些服务 |
给apigateway项目添加基本configuration.json文件
{ "reroutes": [ { "downstreampathtemplate": "/api/values", "downstreamscheme": "http", "downstreamhostandports": [ { "host": "localhost", "port": 9001 } ], "upstreampathtemplate": "/customers", "upstreamhttpmethod": [ "get" ] }, { "downstreampathtemplate": "/api/values/{id}", "downstreamscheme": "http", "downstreamhostandports": [ { "host": "localhost", "port": 9001 } ], "upstreampathtemplate": "/customers/{id}", "upstreamhttpmethod": [ "get" ] } ], "globalconfiguration": { "requestidkey": "ocrequestid", "administrationpath": "/administration" } }
注意
需要注意节点downstreamhostandports,之前的ocelot版本,该节点被downstreamhost和downstreamport替代。
启动这两个项目,你会看到下面的结果。
我们的准备工作完成了,接下来我们对配置流量限制。
在configuration.json添加流量限制
我们只需要添加ratelimitoptions节点。如下的配置。
{ "downstreampathtemplate": "/api/values", "downstreamscheme": "http", "downstreamhostandports": [ { "host": "localhost", "port": 9001 } ], "upstreampathtemplate": "/customers", "upstreamhttpmethod": [ "get" ], "ratelimitoptions": { "clientwhitelist": [], "enableratelimiting": true, "period": "1s", "periodtimespan": 1, "limit": 1 } } //others.....
好了。启动项目看看流量限制效果。
我们可以看见,api请求超出配额,1秒只允许请求1次。当我们的请求在1秒中超过一次。你可以看到下图的情况。
返回状态码为429(请求太多),在返回头(response header)包含retry-after属性,这个属性意味我们1秒后再尝试请求。
更多配置
在上面我们已经实现了速度限制。
可能你会有下面的疑问。
- 我们可以替换默认的提示吗?(超过限制返回的提示)
- 我们能移除返回头的流量限制标记吗?
- 我们能修改超限的返回状态码吗?
当然可以。
只需要添加一些全局配置即可。
"globalconfiguration": { "requestidkey": "ocrequestid", "administrationpath": "/administration", "ratelimitoptions": { "disableratelimitheaders": false, "quotaexceededmessage": "customize tips!", "httpstatuscode": 999 } }
我们具体介绍一下globalconfiguration的ratelimitoptions节点。
- disableratelimitheaders:是否显示x-rate-limit和retry-after头
- quotaexceededmessage:超限提示信息
- httpstatuscode:当流量限制后返回的状态码
添加上面的配置以后,我们看下图的效果。
源码在此
网盘链接:https://pan.baidu.com/s/17sqfgcyx8yehrl_lwkaula
提取码:p3d0
总结
null
上一篇: 二叉树
推荐阅读
-
.net core使用ocelot---第七篇 服务发现
-
.net core使用ocelot---第一篇 简单使用
-
.net core使用ocelot---第二篇 身份验证
-
.net core使用ocelot---第五篇 服务质量
-
.net core使用ocelot---第八篇 Consul
-
.net core使用ocelot---第六篇 负载均衡
-
.net core使用ocelot---第四篇 限流熔断
-
使用Asp.Net Core MVC 开发项目实践[第四篇:基于EF Core的扩展2]
-
ASP.NET Core中使用令牌桶限流的实现
-
asp.net core 使用HttpClientFactory Polly实现熔断降级