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> için akış değişkeninin değeri belirtiliyorsa öğesi 1,5 (tam sayı olmayan bir değer) ise hata oluşur.

Teşhis

  1. Çivi'deki <MessageWeight> öğesi için kullanılan geçersiz değeri belirleyin Tutuklama politikası. Bu bilgileri şu öğenin faultstring öğesinde bulabilirsiniz: hata yanıtı. Örneğin, aşağıdaki hatada, <MessageWeight> öğesi 1.5:

    "faultstring": "Invalid message weight value 1.5"
    
  2. Belirli API Proxy'sinde tüm Spike Arrest politikalarını inceleyin. hatası oluştu. Spike Arrest politikasının yürürlüğe girmesi bir veya daha fazla <MessageWeight> öğesi belirtilir.

    Ö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. Şu öğenin <MessageWeight> öğesinde kullanılan değişkenin değerini belirleyin: belirlenen Spike Sabıka Politikaları. 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 tanımlandığı politikayı belirleyip önce değişken 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, Spike Arrest'ten önce bir JavaScript politikasının kullanıldığını varsayalım. Politika, message_weight değişkenini istek yöntemine göre aşağıda gösterilmiştir:

    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ğuna dikkat edin. geçersiz (tam sayı olmayan) değer.

Çözünürlük

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

Yukarıda gösterilen örneği düzeltmek için JavaScript'teki 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 şu öğede artış durdurma oranını belirtmek için kullanılır: {int}pm veya {int}ps biçiminde olmalıdır. Örneğin {int}pm, 500pm, yani dakikada 500 çağrı. Benzer şekilde, 10ps değeri saniye başına 10 arama anlamına gelir.

Teşhis

  1. Hatanın oluştuğu yerde Spike Arrest politikasını ve referans doğru şekilde çözümlenemeyen referanstır. Bu öğelerin her ikisini de değerini girin.

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

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

    Örneğin, aşağıdaki politika referans içeren öğesini ayarlar request.header.rate adlı, hata dizesindeki değerle eşleşiyor:

    <?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, tanımlı olup olmadığını ve değişkenin Çivi Önleme politikası uygulanıyor.

  4. Değişken şunlardan biriyse:

    • kapsam dışında (politikanın geçerli olduğu belirli akışta kullanılamaz) yürütüldü) veya
    • çözülemiyor (tanımlanmamış)

    hatanın nedeni budur.

    Yukarıda gösterilen örnekte, <Rate> metriğindeki artış durdurma oranının değeri öğesinin rate adlı istek başlığından alınması gerekir. Ancak Edge request.header.rate sorununu çözemez. Bu durum rate başlığı, API isteğinin bir parçası olarak iletilmez.

    Burada, istek:

        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 Spike'taki <Rate> öğesinde kullanılan request.header.rate Tutuklama politikası tanımlanmamış olduğundan çözülemez. Böylece size hata kodu:

    policies.ratelimit.FailedToResolveSpikeArrestRate
    

Çözünürlük

<Rate> öğesinde başvurulan değişkenin mevcut olduğundan/tanımlandığından emin olun ve Spike Arrest politikasının geçerli olduğu belirli akışta kullanılabilir.

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"