2016-09-26 3 views
2

Ich benutze Wso2-AM 2.0.0, um eine Begrenzung der Rate für APIs zu erreichen. Ich habe eine API mit einem Benutzer veröffentlicht und sie wird dann von einem anderen Benutzer abonniert. Beim Abonnieren wähle ich eine Abonnementstufe von 20 Anfragen pro Minute für diese API aus. Die Anwendung, die zum Abonnieren der API verwendet wird, hat ein Limit von 50 Anfragen pro Minute. Jetzt, wenn ich die API teste, passiert nach etwa 50 Anfragen nur die Ratenbegrenzung der Anwendungsebene. Das API-Ebenenlimit wird nicht angewendet. Idealerweise sollte der Benutzer nach 20 Anfragen nicht auf die API zugreifen können. Ich verwende Windows-Rechner, um den wso2-Server und Apache JMeter einzurichten, um Anfragen an den Server zu senden. Was fehlt mir hier? Brauchen Sie etwas Hilfe ...API-Ebene Geschwindigkeitsbegrenzung nicht in Wso2

+0

Verwenden Sie die standardmäßige erweiterte Drosselung? – Bee

+0

Während ich die API veröffentlichte, habe ich dies eingestellt ... Advanced Throttling Policies: Ich habe "Apply to API level" gewählt und den Wert als "Unlimited" aus dem Dropdown gesetzt. – siddhesh

+0

Wenn Sie eine neue Abonnementrichtlinie (20 pro Minute) ordnungsgemäß erstellt haben, sollte sie erwartungsgemäß gedrosselt werden. Können Sie die entsprechende Richtliniendatei in 'wso2am-2.0.0/repository/deployment/server/executionplans' posten? – Bee

Antwort

0

Hier ist eine 4MB/s Politik.

@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

danke :). Das ist was ich wollte – siddhesh