Anda sedang melihat dokumentasi Apigee dan Apigee Hybrid.
Lihat
dokumentasi Apigee Edge.
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 yang ditetapkan untuk elemen <MessageWeight>
adalah 1,5 (nilai non-bilangan bulat), error akan terjadi.
Diagnosis
Identifikasi nilai tidak valid yang digunakan untuk elemen
<MessageWeight>
dalam kebijakan Spike Arrest. Anda dapat menemukan informasi ini dalam elemenfaultstring
respons error. Misalnya, dalam error berikut, nilai yang tidak valid digunakan untuk elemen<MessageWeight>
adalah1.5
:"faultstring": "Invalid message weight value 1.5"
Periksa semua kebijakan Spike Arrest di Proxy API tertentu tempat kegagalan terjadi. Mungkin ada satu atau beberapa kebijakan Penahanan Spike tempat elemen
<MessageWeight>
ditentukan.Misalnya, kebijakan berikut menentukan nilai
<MessageWeight>
melalui variabel flow yang disebutmessage_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>
Tentukan nilai variabel yang digunakan dalam elemen
<MessageWeight>
dari Kebijakan Penangkapan Spike yang diidentifikasi. Nilai variabel flow dapat diekstrak dari header HTTP, parameter kueri, payload permintaan XML atau JSON, atau ditentukan dalam kebijakan lain.- Cari kode dalam proxy API, tempat variabel ditentukan terlebih dahulu.
- Setelah Anda mengetahui kebijakan yang menentukan dan mengisi variabel terlebih dahulu, periksa cara nilai untuk variabel ditetapkan.
- Jika nilai variabel flow cocok dengan nilai yang diidentifikasi pada Langkah #1 di atas, berarti itulah penyebab error.
Misalnya, asumsikan bahwa kebijakan JavaScript digunakan sebelum Kebijakan Penangkapan Spike untuk menetapkan variabel
message_weight
berdasarkan metode permintaan seperti yang ditunjukkan 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
adalah1.5
yang merupakan nilai tidak valid (bukan bilangan bulat).
Resolusi
Pastikan nilai elemen MessageWeight
adalah nilai yang valid (nilai
bilangan bulat).
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 di-resolve menjadi nilai dalam kebijakan Spike Arrest. Elemen ini bersifat wajib dan digunakan untuk menentukan rasio penangkapan 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
Identifikasi kebijakan Penangkapan Spike tempat error terjadi dan nama referensi yang tidak dapat diselesaikan dengan benar. Anda dapat menemukan kedua item ini dalam elemen faultstring respons error.
Misalnya, dalam faultstring berikut, nama kebijakan adalah
SpikeArrest_AuthProxy
dan referensinya adalahrequest.header.rate
:"faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"
Dalam XML kebijakan Penahanan Spike 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>
Tentukan apakah variabel sudah ditentukan dan tersedia dalam alur tempat kebijakan Penangkapan Spike dijalankan.
Jika variabelnya adalah:
- di luar cakupan (tidak tersedia di alur spesifik tempat kebijakan dieksekusi) atau
- tidak dapat diselesaikan (tidak ditentukan)
maka itulah penyebab terjadinya {i>error<i}.
Dalam contoh yang ditunjukkan di atas, nilai tingkat penangkapan lonjakan di elemen
<Rate>
seharusnya diambil dari header permintaan yang bernama rate. Namun, Apigee tidak dapat me-resolve request.header.rate. Hal ini terjadi jika rate header tidak diteruskan sebagai bagian dari permintaan API.Berikut adalah contoh permintaan API yang tidak meneruskan rate header sebagai bagian dari permintaan:
curl -v http://your_host_alias/check_spikearrest -H "Content-Type: application/json"
Dengan your_host_alias adalah domain yang ditampilkan kepada publik yang digunakan untuk mengakses API Anda, seperti yang dikonfigurasi di properti
virtualhosts.hostAliases
di file penggantian Anda. Lihat Menentukan penggantian konfigurasi.Karena rate header tidak diteruskan sebagai bagian dari permintaan, referensi request.header.rate yang digunakan dalam elemen
<Rate>
dalam kebijakan Spike Arrest di atas tidak ditentukan dan tidak dapat diselesaikan. Jadi Anda akan menerima kode error:policies.ratelimit.FailedToResolveSpikeArrestRate
Resolusi
Pastikan variabel yang direferensikan dalam elemen <Rate>
ada/ditentukan
dan tersedia dalam alur tertentu, tempat kebijakan Spike Arrest 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://your_host_alias/check_spikearrest -H "Content-Type: application/json" -H "rate:30ps"
Dengan your_host_alias adalah domain yang ditampilkan kepada publik yang digunakan untuk mengakses API Anda, seperti yang dikonfigurasi di properti virtualhosts.hostAliases
di file penggantian Anda.
Lihat Menentukan penggantian
konfigurasi.