Я пытаюсь создать собственную политику регулирования для запроса газа для каждого IP-адреса.
Правило: каждому Ip разрешено выдавать только 5 запросов за 1 минуту.
Я обнаружил, что ключ газаможет быть только resourceKey, userId, apiContext, apiVersion, appTenant, apiTenant или appId.
Поскольку мой api общедоступен (не требует аутентификации), UserId отсутствует, поэтому я написал собственное расширение, которое является базовым обходным путемограничение шаблона ключа и перемещение 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;
Может ли кто-нибудь помочь решить эту задачу?