我正在尝试创建自定义限制策略以限制每个IP的请求。
规则: 每个Ip在1分钟内只能发出5个请求。
我发现油门键只能是resourceKey,userId,apiContext,apiVersion,appTenant,apiTenant或appId。
由于我的api是公共的(不需要身份验证),所以没有UserId,因此我编写了自定义扩展名,这是针对密钥模板限制的基本解决方法,并将Request的IP移至UserId。
但是节流根本不起作用,这是我的Siddhi查询:
FROM RequestStream
SELECT
userId,
(apiContext == '/test/v1.0.0' and apiVersion == 'v1.0.0') AS isEligible ,
str:concat(userId,':','/test/v1.0.0:v1.0.0') as throttleKey
INSERT INTO EligibilityStream;
FROM EligibilityStream[isEligible==true]#throttler:timeBatch(1 min)
select throttleKey, (count(userId) >= 5) as isThrottled, expiryTimeStamp
group by throttleKey
INSERT ALL EVENTS into ResultStream;
任何人都可以帮助解决此任务吗?