规则
创建算法实例的时候,还需要指定算法的规则,这里根据算法使用的是 FixedWindowRule,对于同一个算法,进程内实现和Redis实现使用相同的规则。
看一下这里使用的规则的几个属性:
ExtractTarget 设置一个函数,用于从HTTP请求中提取要限流的目标,比如这里的客户端IP和客户端ID,还可以是各种可以从请求中提取或关联到的东西,比如Http Header中携带的用户Id,或者根据用户Id查询到的用户年龄。
CheckRuleMatching 设置一个函数,返回当前请求是否能匹配到某个限流规则,如果能匹配到,则返回true。比如只对 /api/req 这个路径限流,那么只要判断请求的路径是它,就返回true,其它路径都返回false。当然也可以是根据各种可以从请求中提取或关联到的东西来进行判断。
Name 限流规则的名字,方便人跟踪的时候进行区分。
StatWindow 限流的时间窗口。比如需求中的每秒钟3次,这里的时间窗口就要设置为1秒。
LimitNumber 限流的次数阈值。比如需求中的每秒钟3次,这里的时间窗口就要设置为3,超过3就会被限流。
规则中还有其它几个属性,不同算法的规则也略有不同,这里就不一一列举了。感兴趣的朋友可以去示例代码和单元测试中认识它们。
一个算法中可以添加多个对应算法的规则,这无疑会比较灵活。
更多使用说明
- ASP.NET Core中使用固定窗口限流
- ASP.NET Core中使用滑动窗口限流
- ASP.NET Core中使用漏桶算法限流
- ASP.NET Core中使用令牌桶限流
- ASP.NET Core中如何对不同类型的用户进行区别限流
- 多租户系统中如何实现分别限流
- .NET6运行时动态更新限流阈值
- 如何使用数组实现滑动窗口
- 限流的非常规用途 – 缓解抢购压力
- 限流的非正式用途 – 解决重复提交问题
- 服务限流惩罚是怎么一回事