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 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 luồng không hợp lệ (một giá trị không phải là 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 là 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 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 đây, giá trị không hợp lệ được sử 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 một biến luồngmessage_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 hạn mức đã xác định. Bạn có thể trích xuất giá trị của biến luồng 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 tìm hiểu chính sách xác định và điền sẵn biế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ì đó chính là nguyên nhân gây ra lỗi.

    Ví dụ: giả sử rằng một chính sách JavaScript được dùng trước Chính sách hạn mức sẽ đặt biến message_weight dựa trên loại yêu cầu như 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_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ị biểu thị MessageWeight mà biến luồng 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 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 bạn không xác định phần tử <Interval> trong chính sách Hạn mức. Phần tử này là bắt buộc và được 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 mà trong đó phần tử bắt buộc <Interval> không được xác định, thì đó là nguyên nhân gây ra lỗi.

    Ví dụ: chính sách về 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ì thành phần bắt buộc <TimeUnit> không được xác định 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 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ụ nêu trên, bạn có thể sửa đổi chính sách để thêm phần tử <Interval> như minh hoạ dưới đây.

<?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 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 bạn không xác định phần tử <TimeUnit> trong chính sách Hạn mức. Phần tử này là bắt buộc và được 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 mà trong đó phần tử bắt buộc <TimeUnit> không được xác định, thì đó là nguyên nhân gây ra lỗi.

    Ví dụ: chính sách về 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ì thành phần bắt buộc <TimeUnit> không được xác định 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 đã xác định phần tử bắt buộc <TimeUnit>.

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

<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>