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, <MessageWeight> öğesi için bir akış değişkeniyle belirtilen değer geçersiz (tam sayı olmayan bir değer) ise 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 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 şeklindedir:

    "faultstring": "Invalid message weight value 1.5"
    
  2. Hatanın gerçekleştiği ilgili API Proxy'sinde bulunan 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 message_weight: adlı bir akış değişkeni aracılığıyla <MessageWeight> değerini 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. Tanımlanan Spike Arrest Politikaları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ünden çıkarılabilir ya da başka bir politikada tanımlanabilir.

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

    Örneğin, aşağıda gösterildiği gibi istek yöntemine göre message_weight değişkenini ayarlamak için Spike Arrest Politikası'ndan ö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, geçersiz (tam sayı olmayan) bir değer olan 1.5 olduğuna dikkat edin.

Çö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 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 ücret ayarını içeren değişkene referans, Spike Arrest politikasındaki bir değere çözümlenemezse 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, 500pm yani dakikada 500 çağrı olabilir. Benzer şekilde, 10ps değeri saniyede 10 çağrı anlamına gelir.

Teşhis

  1. Hatanın oluştuğu Spike Arrest politikasını ve doğru şekilde çözümlenemeyen referansın adını belirleyin. Bu öğelerin ikisini de hata yanıtının hata dizesi öğ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 politika XML'inde, kullanılan referans 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, hata dizesindekiyle eşleşen request.header.rate referanslı öğesini ayarlar:

    <?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ımlanmış ve başlangıç noktası politikasının yürütülmekte olduğu akışta tanımlanmış olup olmadığını belirleyin.

  4. Değişken şunlardan biriyse:

    • kapsam dışındadır (politikanın uygulandığı belirli akışta kullanılamaz) veya
    • çözülemiyor (tanımlanmadı)

    hatanın nedeni budur.

    Yukarıda gösterilen örnekte, <Rate> öğesindeki 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, ücret başlığı API isteği kapsamında iletilmezse meydana gelir.

    Aşağıda, isteğin bir parçası olarak rate başlığını iletmeyen bir API isteği örneği verilmiştir:

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

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

    policies.ratelimit.FailedToResolveSpikeArrestRate
    

Çözünürlük

<Rate> öğesinde başvurulan değişkenin, Spike Arrest 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"