Khắc phục lỗi về hạn mức thời gian chạy

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 về lỗi

{
    "fault": {
        "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ủa phần tử <MessageWeight> được chỉ định thông qua biến flow không hợp lệ (giá trị không phải số nguyên).

Ví dụ: lỗi này sẽ xảy ra nếu giá trị của biến flow được chỉ định cho phần tử <MessageWeight> là 1, 5 (một giá trị không phải số nguyên).

Chẩn đoán

  1. Xác định giá trị không hợp lệ dùng cho phần tử <MessageWeight> trong chính sách về Hạn mức. Bạn có thể tìm thấy thông tin này trong phần tử faultstring của phản hồi lỗi. Ví dụ: trong lỗi sau, giá trị không hợp lệ dùng cho phần tử <MessageWeight>1.5:

    "faultstring": "Invalid message weight value 1.5"
    
  2. Kiểm tra tất cả các chính sách Hạn mức trong Proxy API cụ thể nơi xảy ra lỗi. Có thể có một hoặc nhiều Chính sách hạn mức trong đó phần tử <MessageWeight> được chỉ định.

    Ví dụ: chính sách sau đây chỉ định <MessageWeight> thông qua biến flowmessage_weight:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <Quota async="false" continueOnError="false" enabled="true" name="Quota_with_weight" type="calendar">
        <DisplayName>Quota_with_weight</DisplayName>
        <Properties/>
        <Allow count="3"/>
        <Interval>1</Interval>
        <TimeUnit>minute</TimeUnit>
        <StartTime>2017-7-16 12:00:00</StartTime>
        <MessageWeight ref="message_weight"/>
    </Quota>
    
  3. Xác định giá trị của biến dùng cho <MessageWeight> trong(các) Chính sách về hạn mức đã xác định. Giá trị của biến luồng có thể được trích xuất từ 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 một chính sách khác:

    1. Tìm mã trong gói Proxy API nơi biến được xác định trước tiên.
    2. Sau khi bạn tìm ra chính sách trong đó biến được xác định và điền sẵn trước tiên, hãy kiểm tra cách đặt giá trị cho biến đó.
    3. Nếu giá trị của biến luồng khớp với giá trị đã xác định trong Bước 1 ở trên, thì đó là nguyên nhân gây ra lỗi.

    Ví dụ: giả sử rằng chính sách JavaScript được sử dụng trước Chính sách về hạn mức sẽ đặt biến message_weight dựa trên loại yêu cầu như sau:

    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_weight1.5, đây là giá trị không hợp lệ (không phải số nguyên).

Độ phân giải

Đảm bảo rằng giá trị đại diện cho MessageWeight do biến flow chỉ định là một giá trị hợp lệ (giá trị số nguyên).

Để sửa ví dụ ở trên, bạn có thể sửa đổi giá trị của biến message_weight trong JavaScript thành một số nguyên.

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

FailedToResolveQuotaIntervalReference

Mã lỗi

policies.ratelimit.FailedToResolveQuotaIntervalReference

Nội dung phản hồi về lỗi

{
    "fault": {
        "faultstring": "Failed to resolve quota interval reference [reference] in quota policy {1}",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalReference"
        }
    }
}

Ví dụ về thông báo lỗi

{
    "fault": {
        "faultstring": "Failed to resolve quota interval reference api.product.developer.quota.interval in quota policy {1}",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalReference"
        }
    }
}

Nguyên nhân

Lỗi này xảy ra nếu phần tử <Interval> không được xác định trong Chính sách hạn mức. Phần tử này là bắt buộc và dùng để chỉ định khoảng thời gian áp dụng cho hạn mức. Khoảng thời gian có thể là phút, giờ, ngày, tuần hoặc tháng như được xác định bằng phần tử <TimeUnit>.

Chẩn đoán

  1. Kiểm tra từng chính sách Hạn mức trong Proxy API nơi xảy ra lỗi. Nếu có bất kỳ Chính sách hạn mức nào không xác định phần tử bắt buộc <Interval>, thì đó là nguyên nhân gây ra lỗi.

    Ví dụ: Chính sách hạn mức sau đây không có phần tử bắt buộc <Interval>:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <Quota async="false" continueOnError="false" enabled="true" name="CheckQuota" type="calendar">
        <DisplayName>CheckQuota</DisplayName>
        <Properties/>
        <Allow count="3"/>
            <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.quota.timeunit">hour</TimeUnit>
        <StartTime>2017-7-16 12:00:00</StartTime>
    </Quota>
    

    Vì phần tử bắt buộc <TimeUnit> không được định nghĩa trong chính sách về Hạn mức ở trên nên bạn sẽ nhận được mã lỗi:

    policies.ratelimit.FailedToResolveQuotaIntervalReference
    

Độ phân giải

Đảm bảo rằng tất cả các chính sách về Hạn mức cho một proxy API nhất định đều có phần tử bắt buộc <Interval> được xác định đúng cách.

Để sửa ví dụ ở trên, bạn có thể sửa đổi chính sách để thêm phần tử <Interval> như minh hoạ bên dưới.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Quota async="false" continueOnError="false" enabled="true" name="CheckQuota" type="calendar">
    <DisplayName>CheckQuota</DisplayName>
    <Properties/>
    <Allow count="3"/>
    <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.quota.timeunit">hour</TimeUnit>
    <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.quota.interval">1</Interval>
    <StartTime>2017-7-16 12:00:00</StartTime>
</Quota>

FailedToResolveQuotaIntervalTimeUnitReference

Mã lỗi

policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference

Nội dung phản hồi về lỗi

{
    "fault": {
        "faultstring": "Failed to resolve quota time unit reference [reference] in quota policy {1}",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference"
        }
    }
}

Ví dụ về thông báo lỗi

{
    "fault": {
        "faultstring": "Failed to resolve quota time unit reference apiproduct.developer.quota.timeunity in quota policy {1}",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference"
        }
    }
}

Nguyên nhân

Lỗi này xảy ra nếu phần tử <TimeUnit> không được xác định trong Chính sách hạn mức. Phần tử này là bắt buộc và dùng để chỉ định đơn vị thời gian áp dụng cho hạn mức. Khoảng thời gian có thể tính bằng phút, giờ, ngày, tuần hoặc tháng.

Chẩn đoán

  1. Kiểm tra từng chính sách Hạn mức trong Proxy API nơi xảy ra lỗi. Nếu có bất kỳ Chính sách hạn mức nào không xác định phần tử bắt buộc <TimeUnit>, thì đó là nguyên nhân gây ra lỗi.

    Ví dụ: Chính sách hạn mức sau đây không có phần tử bắt buộc <TimeUnit>:

    <Quota async="false" continueOnError="false" enabled="true" name="CheckQuota" type="calendar">
      <DisplayName>CheckQuota</DisplayName>
      <Properties/>
      <Allow count="3"/>
          <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.quota.interval">1</Interval>
      <StartTime>2017-7-16 12:00:00</StartTime>
    </Quota>
    

    Vì phần tử bắt buộc <TimeUnit> không được định nghĩa trong chính sách về Hạn mức ở trên nên bạn sẽ nhận được mã lỗi:

    policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference
    

Độ phân giải

Đảm bảo rằng tất cả các chính sách Hạn mức cho một proxy API nhất định đều có phần tử bắt buộc <TimeUnit> được xác định.

Để sửa ví dụ ở trên, bạn có thể sửa đổi chính sách để thêm phần tử <TimeUnit> như minh hoạ bên dưới.

<Quota async="false" continueOnError="false" enabled="true" name="CheckQuota" type="calendar">
    <DisplayName>CheckQuota</DisplayName>
    <Properties/>
    <Allow count="3"/>
    <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.quota.timeunit">hour</TimeUnit>
    <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.quota.interval">1</Interval>
    <StartTime>2017-7-16 12:00:00</StartTime>
</Quota>