Ограничение скорости уровня API не происходит в wso2


Я использую wso2-am 2.0.0 для достижения ограничения скорости для API. Я опубликовал API с одним пользователем, а затем подписался на него другим пользователем. Во время подписки я выбираю уровень подписки 20 запросов в минуту для этого API. Кроме того, приложение, используемое для подписки на API, имеет ограничение в 50 запросов в минуту. Теперь, когда я тестирую API, ограничение скорости только на уровне приложений происходит примерно после 50 запросов. Ограничение уровня API не применяется. В идеале пользователь не должно быть возможности получить доступ к API после 20 запросов. Я использую Windows machine для настройки сервера wso2 и Apache JMeter для отправки запросов на сервер. Чего мне здесь не хватает? Нужна помощь...

1 2

1 ответ:

Вот политика 4MB/s.

    @Plan:name('carbon.super_app_BandwidthPolicy')
    @Plan:description('ExecutionPlan for app_BandwidthPolicy')

    @Import('org.wso2.throttle.processed.request.stream:1.0.0')
    define stream RequestStream (messageID string, appKey string, appTier string, subscriptionKey string, apiKey string, apiTier string, subscriptionTier string, resourceKey string, resourceTier string, userId string,  apiContext string, apiVersion string, appTenant string, apiTenant string, appId string, apiName string, propertiesMap string);

    @Export('org.wso2.throttle.globalThrottle.stream:1.0.0')
    define stream GlobalThrottleStream (throttleKey string, isThrottled bool, expiryTimeStamp long);

    FROM RequestStream
    SELECT messageID, (appTenant == 'carbon.super' and appTier == 'BandwidthPolicy') AS isEligible, appKey AS throttleKey, propertiesMap
    INSERT INTO EligibilityStream;

            FROM EligibilityStream[isEligible==true]#throttler:timeBatch(1 min, 0)
            select throttleKey, (sum(cast(map:get(propertiesMap,'messageSize'),'long')) >= 4194304) as isThrottled, expiryTimeStamp group by throttleKey
            INSERT ALL EVENTS into ResultStream;

    from ResultStream#throttler:emitOnStateChange(throttleKey, isThrottled)
    select *
    insert into GlobalThrottleStream;