Pemecahan masalah error runtime kebijakan Penahanan Spike

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 variabel flow tidak valid (nilai non-bilangan bulat).

Misalnya, jika nilai variabel flow ditentukan untuk <MessageWeight> adalah 1,5 (nilai bukan bilangan bulat), maka terjadi kesalahan.

Diagnosis

  1. Mengidentifikasi nilai yang tidak valid yang digunakan untuk elemen <MessageWeight> di Spike Kebijakan penangkapan. Anda dapat menemukan informasi ini di elemen faultstring elemen respons error yang ada. Misalnya, dalam error berikut, nilai tidak valid digunakan untuk Elemen <MessageWeight> adalah 1.5:

    "faultstring": "Invalid message weight value 1.5"
    
  2. Periksa semua kebijakan Spike Arrest di Proxy API tertentu tempat kegagalan terjadi. Mungkin ada satu atau lebih kebijakan Penangkapan Lonjakan yang elemen <MessageWeight> ditentukan.

    Misalnya, kebijakan berikut menentukan nilai <MessageWeight> melalui variabel flow 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 Penangkapan Lonjakan yang teridentifikasi. Nilai variabel flow dapat yang diekstrak dari header HTTP, parameter kueri, payload permintaan XML atau JSON, atau didefinisikan dalam kebijakan lain.

    1. Temukan kode dalam proxy API, tempat variabel ditentukan terlebih dahulu.
    2. Setelah Anda mengetahui kebijakan di mana variabel ditentukan dan diisi terlebih dahulu, periksa bagaimana nilai untuk variabel ditetapkan.
    3. Jika nilai variabel alur cocok dengan nilai yang diidentifikasi di Langkah #1 di atas, maka itulah penyebab errornya.

    Misalnya, asumsikan bahwa kebijakan JavaScript digunakan sebelum Pangkalan Lonjakan Kebijakan untuk menetapkan variabel message_weight berdasarkan metode permintaan sebagai yang ditampilkan di bawah ini:

    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 nilai tidak valid (bukan bilangan bulat).

Resolusi

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

Untuk memperbaiki contoh yang ditampilkan di atas, Anda dapat mengubah nilai variabel message_weight dalam 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 tarif dalam elemen <Rate> tidak dapat diselesaikan menjadi nilai dalam Spike Arrest lebih lanjut. Elemen ini bersifat wajib dan digunakan untuk menentukan tingkat penghentian lonjakan dalam bentuk {int}pm atau {int}ps. Misalnya, {int}pm mungkin adalah 500pm, yang berarti 500 panggilan per menit. Demikian pula, nilai 10ps berarti 10 panggilan per kedua.

Diagnosis

  1. Identifikasi kebijakan Spike Arrest di mana kesalahan terjadi dan nama yang tidak dapat diselesaikan dengan benar. Anda dapat menemukan kedua item ini dalam elemen {i> faultstring <i}dari respons {i>error<i}.

    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, verifikasi bahwa nama referensinya 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 dijalankan.

  4. Jika variabelnya adalah:

    • di luar cakupan (tidak tersedia dalam alur spesifik tempat kebijakan dibuat dieksekusi) atau
    • tidak dapat diselesaikan (tidak ditentukan)

    maka itulah penyebab {i>error<i}.

    Pada contoh yang ditampilkan di atas, nilai rasio penangkapan lonjakan di elemen <Rate> seharusnya diambil dari header permintaan bernama rate. Namun, Edge tidak dapat menyelesaikan masalah request.header.rate. Hal ini sering terjadi jika rate header tidak diteruskan sebagai bagian dari permintaan API.

    Berikut ini contoh permintaan API yang tidak meneruskan rate header 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 Spike Arrest di atas tidak ditentukan sehingga tidak dapat di-resolve. Sehingga 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 Penangkapan Spike dijalankan.

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

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