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

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

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 (tam sayı olmayan bir değer) ortaya çıkar.

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

Teşhis

  1. Spike Arrest politikasında <MessageWeight> öğesi için kullanılan geçersiz değeri tanımlayın. 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'tır:

    "faultstring": "Invalid message weight value 1.5"
    
  2. Hatanın gerçekleştiği ilgili API Proxy'sinde tüm Spike Arrest politikalarını inceleyin. <MessageWeight> öğesinin belirtildiği bir veya daha fazla ani artış durdurma 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 Spike Sabıka Politikası'nın <MessageWeight> öğesinde kullanılan değişkenin değerini belirleyin. Akış değişkeninin değeri, HTTP üst bilgilerinden, sorgu parametrelerinden, XML veya JSON istek yükü verisinden ayıklanabilir ya da başka bir politikada tanımlanabilir.

    1. Değişkenin ilk olarak tanımlandığı API proxy'sinde 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, message_weight değişkenini istek yöntemine göre ayarlamak için Spike Arrest Politikası'ndan önce bir JavaScript politikasının kullanıldığını varsayalım. Bu politika aşağıdaki gibidir:

    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'te message_weight değişkeninin değerini 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> öğesinde ücret ayarını içeren değişkene yapılan referans, Spike Arrest politikasındaki bir değere çözülemiyorsa ortaya çıkar. Bu öğe zorunludur ve artış durdurma oranını {int}pm veya {int}ps biçiminde belirtmek için kullanılır. Örneğin, {int}pm değeri 500pm, yani dakikada 500 çağrı olabilir. Benzer şekilde, 10ps değeri saniye başına 10 arama anlamına gelir.

Teşhis

  1. Hatanın oluştuğu Spike Arrest politikasını ve düzgün şekilde çözülemeyen referansın adını belirleyin. Bu öğelerin ikisini de hata yanıtının faultstring öğesinde bulabilirsiniz.

    Örneğin, aşağıdaki hata dizesinde politika adı SpikeArrest_AuthProxy ve referans request.header.rate'tır:

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

    Örneğin, aşağıdaki politika öğesini request.header.rate adlı referansla ayarlar. Bu referans, hata dizesindeki değerle 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ışında (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
    • çözülemez (tanımlanmamıştır)

    hatanın nedeni budur.

    Yukarıda gösterilen örnekte, <Rate> öğesindeki ani artış durdurma oranının değerinin rate adlı istek başlığından alınması gerekir. Ancak Edge request.header.rate sorununu çözemez. Bu durum, rate başlığı API isteği kapsamında iletilmediği takdirde ortaya çıkar.

    İsteğin bir parçası olarak rate üst bilgisini iletmeyen örnek bir API isteği:

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

    Rate başlığı istek kapsamında iletilmediğinden, yukarıdaki Spike Arrest politikasındaki <Rate> öğesinde kullanılan request.header.rate referansı tanımlanmamıştır ve bu nedenle çözülemez. Bu durumda şu hata kodunu alırsınız:

    policies.ratelimit.FailedToResolveSpikeArrestRate
    

Çözünürlük

<Rate> öğesinde atıfta bulunulan değişkenin, ani artış durdurma politikasının yürütüldüğü belirli 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ğıda gösterildiği gibi rate başlığını içerecek şekilde değiştirebilirsiniz:

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