2016-09-26 5 views
2

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

+0

Вы используете стандартное расширенное дросселирование по умолчанию? – Bee

+0

Публикуя API, я установил это ... Политика расширенного управления: я выбрал «Применить к уровню API» и поместил в раскрывающемся списке значение «Без ограничений». – siddhesh

+0

Если вы создали новую политику подписки (которая составляет 20 в минуту) правильно, она должна дросселировать, как ожидалось. Можете ли вы разместить соответствующий файл политики в 'wso2am-2.0.0/repository/deployment/server/executionplans'? – Bee

ответ

0

Политика конфиденциальности.

@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; 
+0

спасибо :). Это то, что я хотел – siddhesh