Spike Arrest politikası çalışma zamanı hatasıyla ilgili sorunları giderme

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
bilgi

InvalidMessageWeight

Hata kodu

policies.ratelimit.InvalidMessageWeight

Hata yanıtı gövdesi

{
    "fault": {jdoe
        "faultstring": "Invalid message weight value [invalid_value]",
        "detail": {
            "errorcode": "policies.ratelimit.InvalidMessageWeight"
        }
    }
}

Örnek Hata Mesajı

{
    "fault": {
        "faultstring": "Invalid message weight value 1.5",
        "detail": {
            "errorcode": "policies.ratelimit.InvalidMessageWeight"
        }
    }
}

Neden

Bu hata, bir akış değişkeni aracılığıyla <MessageWeight> öğesi için belirtilen değer geçersizse (tamsayı olmayan bir değer) oluşur.

Örneğin, <MessageWeight> öğesi için belirtilen akış değişkeninin değeri 1,5 ise (tam sayı olmayan bir değer) hata oluşur.

Teşhis

  1. SpikeArrest politikasında <MessageWeight> öğesi için kullanılan geçersiz değeri belirleyin. Bu bilgileri hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, aşağıdaki hatada <MessageWeight> öğesi için kullanılan geçersiz değer 1.5'dir:

    "faultstring": "Invalid message weight value 1.5"
    
  2. Hatayı içeren API proxy'sindeki tüm Spike Arrest politikalarını inceleyin. <MessageWeight> öğesinin belirtildiği bir veya daha fazla Spike Arrest politikası olabilir.

    Örneğin, aşağıdaki politika, <MessageWeight> değerini message_weight: adlı bir akış değişkeni aracılığıyla belirtir.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <SpikeArrest async="false" continueOnError="false" enabled="true" name="SpikeArrest_AuthProxy">
        <DisplayName>SpikeArrest_AuthProxy</DisplayName>
        <Properties/>
        <Identifier ref="request.header.some-header-name"/>
        <Rate>100ps</Rate>
        <MessageWeight ref="message_weight"/>
    </SpikeArrest>
    
  3. Belirlenen ani akım önleme politikalarının <MessageWeight> öğesinde kullanılan değişkenin değerini belirleyin. Akış değişkeninin değeri HTTP üstbilgilerinden, sorgu parametrelerinden, bir XML veya JSON isteği yükünden çıkarılabilir ya da başka bir politikada tanımlanabilir.

    1. Değişkenin ilk olarak tanımlandığı API proxy'sindeki kodu bulun.
    2. Değişkenin ilk olarak tanımlandığı ve doldurulduğu politikayı belirledikten sonra değişkenin değerinin nasıl ayarlandığını kontrol edin.
    3. Akış değişkeninin değeri, yukarıdaki 1. adımda tanımlanan değerle eşleşiyorsa hatanın nedeni budur.

    Örneğin, istek yöntemine göre message_weight değişkenini ayarlamak için Spike Arrest Policy'den önce bir JavaScript politikasının kullanıldığını varsayalım.

    var verb = context.getVariable("request.verb");
    context.setVariable("message_weight", "1.5");
    if (verb == 'POST') {
      context.setVariable("message_weight", "2");
    }
    

    message_weight değişkeninin değerinin 1.5 olduğunu ve bunun geçersiz (tam sayı olmayan) bir değer olduğunu unutmayın.

Çözünürlük

MessageWeight öğesinin değerinin geçerli bir değer (tam sayı değeri) olduğundan emin olun.

Yukarıda gösterilen örneği düzeltmek için JavaScript'teki message_weight değişkeninin değerini bir tam sayı olacak şekilde değiştirebilirsiniz:

var verb = context.getVariable("request.verb");
context.setVariable("message_weight", "1");
if (verb == 'POST') {
  context.setVariable("message_weight", "2");
}

FailedToResolveSpikeArrestRate

Hata kodu

policies.ratelimit.FailedToResolveSpikeArrestRate

Hata yanıtı gövdesi

{
    "fault": {
        "faultstring": "Failed to resolve Spike Arrest Rate reference [reference] in SpikeArrest policy [api_policy]",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveSpikeArrestRate"
        }
    }
}

Örnek Hata Mesajı

{
    "fault": {
        "faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveSpikeArrestRate"
        }
    }
}

Neden

Bu hata, <Rate> öğesindeki hız ayarını içeren değişkene yapılan referans, Spike Arrest politikasındaki bir değerle çözümlenemediğinde oluşur. Bu öğe zorunludur ve {int}pm veya {int}ps biçiminde ani artışları önleme oranını belirtmek için kullanılır. Örneğin, {int}pm 500pm olabilir. Bu, dakikada 500 çağrı anlamına gelir. Benzer şekilde, 10ps değeri saniyede 10 çağrı anlamına gelir.

Teşhis

  1. Hataya neden olan ani artış önleme politikasını ve düzgün şekilde çözümlenemeyen referansın adını belirleyin. Bu öğelerin ikisini de hata yanıtının faultstring öğesinde bulabilirsiniz.

    Örneğin, aşağıdaki faultstring'de politika adı SpikeArrest_AuthProxy, referans ise request.header.rate'dir:

    "faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"
    
  2. Başarısız olan ani artış engelleme politikası XML'sinde, kullanılan referansın adının hata dizesinde (yukarıdaki 1. adım) tanımlanan referans adıyla eşleştiğini doğrulayın. ** **

    Örneğin, aşağıdaki politika, öğesini request.header.rate adlı referansla ayarlar. Bu referans, hata dizesindekiyle eşleşir:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <SpikeArrest async="false" continueOnError="false" enabled="true" name="SpikeArrest_AuthProxy">
        <DisplayName>SpikeArrest_AuthProxy</DisplayName>
        <Properties/>
        <Identifier ref="request.header.some-header-name"/>
        <Rate ref="request.header.rate"/>
    </SpikeArrest>
    
    
  3. Değişkenin, Spike Arrest politikasının yürütüldüğü akışta tanımlanıp tanımlanmadığını ve kullanılabilir olup olmadığını belirleyin.

  4. Değişken şu durumlarda:

    • kapsam dışı (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
    • çözümlenemiyor (tanımlanmamış)

    Bu durumda hatanın nedeni budur.

    Yukarıdaki örnekte, <Rate> öğesindeki ani artış engelleme oranı değerinin rate adlı istek başlığından alınması gerekir. Ancak Edge, request.header.rate değerini çözemiyor. Bu durum, rate başlığı API isteğinin bir parçası olarak iletilmezse meydana gelir.

    İsteğin bir parçası olarak oran üstbilgisini geçirmeyen örnek bir API isteğini aşağıda bulabilirsiniz:

        curl -v http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json"
    

    rate başlığı isteğin bir parçası olarak iletilmediğinden, yukarıdaki ani artış engelleme politikasındaki <Rate> öğesinde kullanılan request.header.rate referansı tanımlanmamıştır ve bu nedenle çözümlenemez. Bu nedenle, şu hata kodunu alırsınız:

    policies.ratelimit.FailedToResolveSpikeArrestRate
    

Çözünürlük

<Rate> öğesinde referans verilen değişkenin, Spike Arrest politikasının yürütüldüğü akışta mevcut/tanımlanmış ve kullanılabilir olduğundan emin olun.

Yukarıda gösterilen örneği düzeltmek için isteği aşağıdaki gibi değiştirerek rate (oran) başlığını ekleyebilirsiniz:

curl -v  http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json" -H "rate:30ps"