Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến
Tài liệu về Apigee X. thông tin
InvalidMessageWeight
Mã lỗi
policies.ratelimit.InvalidMessageWeight
Nội dung phản hồi lỗi
{ "fault": {jdoe "faultstring": "Invalid message weight value [invalid_value]", "detail": { "errorcode": "policies.ratelimit.InvalidMessageWeight" } } }
Ví dụ về thông báo lỗi
{ "fault": { "faultstring": "Invalid message weight value 1.5", "detail": { "errorcode": "policies.ratelimit.InvalidMessageWeight" } } }
Nguyên nhân
Lỗi này xảy ra nếu giá trị được chỉ định cho phần tử <MessageWeight>
thông qua
biến luồng không hợp lệ (giá trị không phải là số nguyên).
Ví dụ: nếu giá trị của biến luồng được chỉ định cho <MessageWeight>
là 1,5 (giá trị không phải số nguyên), thì lỗi sẽ xảy ra.
Chẩn đoán
Xác định giá trị không hợp lệ dùng cho phần tử
<MessageWeight>
trong Spike Chính sách bắt giữ. Bạn có thể tìm thấy thông tin này trong phần tửfaultstring
của phần tử của bạn. Ví dụ: trong lỗi sau, giá trị không hợp lệ được sử dụng cho Phần tử<MessageWeight>
là1.5
:"faultstring": "Invalid message weight value 1.5"
Kiểm tra tất cả chính sách Bắt giữ tăng đột biến trong Proxy API cụ thể mà đã xảy ra lỗi. Có thể có một hoặc nhiều chính sách Bắt giữ tăng đột biến trong đó phần tử
<MessageWeight>
sẽ được chỉ định.Ví dụ: chính sách sau đây chỉ định giá trị của
<MessageWeight>
thông qua một biến luồng có tên là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>
Xác định giá trị của biến được dùng trong phần tử
<MessageWeight>
của (các) Chính sách về việc giam giữ tăng đột biến. Giá trị của biến luồng có thể là được trích xuất từ các tiêu đề HTTP, tham số truy vấn, tải trọng yêu cầu XML hoặc JSON, hoặc được xác định trong chính sách khác.- Tìm mã trong proxy API, nơi biến được xác định đầu tiên.
- Khi bạn tìm ra chính sách mà trong đó biến được xác định và trước tiên, hãy kiểm tra cách đặt giá trị cho biến.
- Nếu giá trị của biến flow khớp với giá trị được xác định ở Bước #1 ở trên, thì đó là nguyên nhân gây ra lỗi.
Ví dụ: giả sử một chính sách JavaScript được sử dụng trước Chính sách ngăn chặn sự kiện tăng đột biến để đặt biến
message_weight
dựa trên phương thức yêu cầu như minh hoạ bên dưới:var verb = context.getVariable("request.verb"); context.setVariable("message_weight", "1.5"); if (verb == 'POST') { context.setVariable("message_weight", "2"); }
Lưu ý rằng giá trị của biến
message_weight
là1.5
, giá trị không hợp lệ (không phải số nguyên).
Độ phân giải
Đảm bảo giá trị của phần tử MessageWeight
là giá trị hợp lệ (số nguyên
giá trị).
Để sửa ví dụ nêu trên, bạn có thể sửa đổi giá trị của biến
message_weight
trong JavaScript là một số nguyên:
var verb = context.getVariable("request.verb");
context.setVariable("message_weight", "1");
if (verb == 'POST') {
context.setVariable("message_weight", "2");
}
FailedToResolveSpikeArrestRate
Mã lỗi
policies.ratelimit.FailedToResolveSpikeArrestRate
Nội dung phản hồi lỗi
{ "fault": { "faultstring": "Failed to resolve Spike Arrest Rate reference [reference] in SpikeArrest policy [api_policy]", "detail": { "errorcode": "policies.ratelimit.FailedToResolveSpikeArrestRate" } } }
Ví dụ về thông báo lỗi
{ "fault": { "faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy", "detail": { "errorcode": "policies.ratelimit.FailedToResolveSpikeArrestRate" } } }
Nguyên nhân
Lỗi này xảy ra nếu tham chiếu đến biến chứa chế độ cài đặt mức giá
trong phần tử <Rate>
không thể được giải quyết thành một giá trị trong
. Phần tử này là bắt buộc và dùng để chỉ định tỷ lệ ngăn chặn tăng đột biến ở
dưới dạng {int}pm
hoặc {int}ps
. Ví dụ: {int}pm
có thể là 500pm
,
tức là 500 cuộc gọi mỗi phút. Tương tự, giá trị 10ps
có nghĩa là 10 lệnh gọi mỗi giây.
Chẩn đoán
Xác định Chính sách về việc bắt giữ tăng đột biến nơi xảy ra lỗi và tên của tham chiếu không thể được giải quyết đúng cách. Bạn có thể tìm thấy cả hai mục này trong phần tử chuỗi lỗi của phản hồi lỗi.
Ví dụ: trong chuỗi lỗi sau đây, tên chính sách là
SpikeArrest_AuthProxy
và tham chiếu làrequest.header.rate
:"faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"
Trong tệp XML chính sách về việc Bắt giữ tăng đột biến không thành công, hãy xác minh rằng tên của tham chiếu sử dụng khớp với tên tham chiếu được xác định trong chuỗi lỗi (bước #1 ở trên). ** **
Ví dụ: chính sách sau đây đặt phần tử
có tham chiếu tên là request.header.rate
, khớp với nội dung trong 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>
Xác định xem biến có được xác định và có sẵn trong luồng mà chính sách Chặn sự kiện tăng đột biến đang được thực thi hay không.
Nếu biến là:
- nằm ngoài phạm vi (không có trong luồng cụ thể mà chính sách đang được thực thi) hoặc
- không thể phân giải (chưa được xác định)
thì đó là nguyên nhân gây ra lỗi.
Trong ví dụ trên, giá trị của tốc độ chặn đỉnh trong phần tử
<Rate>
được giả định là được truy xuất từ tiêu đề yêu cầu có tên là rate (tốc độ). Tuy nhiên, Edge không thể giải quyết request.header.rate. Điều này xảy ra nếu rate tiêu đề không được chuyển trong yêu cầu API.Dưới đây là một yêu cầu API mẫu không vượt qua tỷ lệ tiêu đề yêu cầu:
curl -v http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json"
Vì rate tiêu đề không được chuyển như một phần của yêu cầu, hãy tham chiếu request.header.rate được sử dụng trong phần tử
<Rate>
theo mô tả ở trên Chính sách bắt giữ là chưa xác định nên không thể giải quyết. Vì vậy, bạn sẽ nhận được mã lỗi:policies.ratelimit.FailedToResolveSpikeArrestRate
Độ phân giải
Đảm bảo biến được tham chiếu trong phần tử <Rate>
tồn tại/đã được xác định
và có sẵn trong quy trình cụ thể, trong đó Chính sách bắt giữ tăng đột biến đang được thực thi.
Để sửa ví dụ nêu trên, bạn có thể sửa đổi yêu cầu để thêm tiêu đề rate (tỷ lệ) như minh hoạ dưới đây:
curl -v http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json" -H "rate:30ps"