Pemecahan masalah error runtime kebijakan Penahanan Lonjakan

Anda sedang melihat dokumentasi Apigee Edge.
Buka dokumentasi Apigee X.
info

InvalidMessageWeight

Kode error

policies.ratelimit.InvalidMessageWeight

Isi respons error

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

Contoh Pesan Error

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

Penyebab

Error ini terjadi jika nilai yang ditentukan untuk elemen <MessageWeight> melalui flow variable tidak valid (nilai non-bilangan bulat).

Misalnya, jika nilai flow variable yang ditentukan untuk elemen <MessageWeight> adalah 1,5 (nilai non-bilangan bulat), maka error akan terjadi.

Diagnosis

  1. Identifikasi nilai tidak valid yang digunakan untuk elemen <MessageWeight> dalam kebijakan Spike Arrest. Anda dapat menemukan informasi ini di elemen faultstring dari respons error. Misalnya, pada error berikut, nilai tidak valid yang digunakan untuk elemen <MessageWeight> adalah 1.5:

    "faultstring": "Invalid message weight value 1.5"
    
  2. Periksa semua kebijakan Pembatasan Lonjakan di Proxy API tertentu tempat kegagalan terjadi. Mungkin ada satu atau beberapa kebijakan Pembatasan Lonjakan yang menentukan elemen <MessageWeight>.

    Misalnya, kebijakan berikut menentukan nilai <MessageWeight> melalui variabel alur yang disebut message_weight:

    <?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. Tentukan nilai variabel yang digunakan dalam elemen <MessageWeight> dari Kebijakan Pembatasan Lonjakan yang diidentifikasi. Nilai flow variable dapat diekstrak dari header HTTP, parameter kueri, payload permintaan XML atau JSON, atau ditentukan dalam kebijakan lain.

    1. Cari kode dalam proxy API, tempat variabel ditentukan pertama kali.
    2. Setelah Anda mengetahui kebijakan tempat variabel ditentukan dan diisi pertama kali, periksa cara nilai variabel ditetapkan.
    3. Jika nilai flow variable cocok dengan nilai yang diidentifikasi pada Langkah #1 di atas, maka itulah penyebab errornya.

    Misalnya, asumsikan bahwa kebijakan JavaScript digunakan sebelum Kebijakan Pembatasan Lonjakan untuk menetapkan variabel message_weight berdasarkan metode permintaan seperti yang ditunjukkan di bawah:

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

    Perhatikan bahwa nilai variabel message_weight adalah 1.5 yang merupakan nilai tidak valid (non-bilangan bulat).

Resolusi

Pastikan nilai elemen MessageWeight adalah nilai yang valid (nilai bilangan bulat).

Untuk memperbaiki contoh yang ditunjukkan di atas, Anda dapat mengubah nilai variabel message_weight di JavaScript menjadi bilangan bulat:

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

FailedToResolveSpikeArrestRate

Kode error

policies.ratelimit.FailedToResolveSpikeArrestRate

Isi respons error

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

Contoh Pesan Error

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

Penyebab

Error ini terjadi jika referensi ke variabel yang berisi setelan kecepatan dalam elemen <Rate> tidak dapat diselesaikan ke nilai dalam kebijakan Penetapan Batas Lonjakan. Elemen ini wajib diisi dan digunakan untuk menentukan laju penekanan lonjakan dalam bentuk {int}pm atau {int}ps. Misalnya, {int}pm mungkin 500pm, yang berarti 500 panggilan per menit. Demikian pula, nilai 10ps berarti 10 panggilan per detik.

Diagnosis

  1. Identifikasi kebijakan Spike Arrest tempat terjadinya error dan nama referensi yang tidak dapat diselesaikan dengan benar. Anda dapat menemukan kedua item ini di elemen faultstring dalam respons error.

    Misalnya, dalam faultstring berikut, nama kebijakan adalah SpikeArrest_AuthProxy dan referensinya adalah request.header.rate:

    "faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"
    
  2. Dalam XML kebijakan Spike Arrest yang gagal, pastikan nama referensi yang digunakan cocok dengan nama referensi yang diidentifikasi dalam string kesalahan (langkah #1 di atas). ** **

    Misalnya, kebijakan berikut menetapkan elemen dengan referensi bernama request.header.rate, yang cocok dengan yang ada di faultstring:

    <?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. Tentukan apakah variabel ditentukan dan tersedia dalam alur tempat kebijakan Spike Arrest sedang dieksekusi.

  4. Jika variabelnya adalah:

    • di luar cakupan (tidak tersedia dalam alur tertentu tempat kebijakan dijalankan) atau
    • tidak dapat diselesaikan (tidak ditentukan)

    maka itulah penyebab error.

    Dalam contoh yang ditunjukkan di atas, nilai laju penahanan lonjakan pada elemen <Rate> seharusnya diambil dari header permintaan bernama rate. Namun, Edge tidak dapat menyelesaikan request.header.rate. Hal ini terjadi jika header rate tidak diteruskan sebagai bagian dari permintaan API.

    Berikut contoh permintaan API yang tidak meneruskan header rate sebagai bagian dari permintaan:

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

    Karena header rate tidak diteruskan sebagai bagian dari permintaan, referensi request.header.rate yang digunakan dalam elemen <Rate> dalam kebijakan Pembatasan Lonjakan di atas tidak ditentukan dan oleh karena itu tidak dapat diselesaikan. Jadi, Anda akan menerima kode error:

    policies.ratelimit.FailedToResolveSpikeArrestRate
    

Resolusi

Pastikan variabel yang dirujuk dalam elemen <Rate> ada/ditentukan dan tersedia dalam alur tertentu, tempat kebijakan Pembatasan Lonjakan dieksekusi.

Untuk memperbaiki contoh yang ditunjukkan di atas, Anda dapat mengubah permintaan untuk menyertakan header rate seperti yang ditunjukkan di bawah:

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