Đặt lại khắc phục sự cố 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

InvalidRLPolicy

Mã lỗi

policies.resetquota.InvalidRLPolicy

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

{
    "fault": {
        "faultstring": "Invalid rate limit policy quota_policy_name",
        "detail": {
            "errorcode": "policies.resetquota.InvalidRLPolicy"
        }
    }
}

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

{
    "fault": {
        "faultstring": "Invalid rate limit policy MyQuotaPolicy",
        "detail": {
            "errorcode": "policies.resetquota.InvalidRLPolicy"
        }
    }
}

Nguyên nhân

Lỗi này xảy ra nếu Chính sách hạn mức được chỉ định trong phần tử <Quota> của chính sách Đặt lại hạn mức không được xác định trong proxy API. Phần tử <Quota> là bắt buộc và xác định chính sách Hạn mức mục tiêu có bộ đếm cần được cập nhật thông qua chính sách Đặt lại hạn mức. Chính sách về hạn mức mục tiêu này phải được tạo và xác định trong cùng một proxy API và phải có sẵn trong luồng.

Ví dụ: giả sử phần tử <Quota> được định nghĩa như hình dưới đây, nhưng nếu MyQuotaPolicy không được xác định trong Proxy API thì bạn sẽ gặp lỗi trên.

<Quota name="MyQuotaPolicy">

Chẩn đoán

  1. Xác định tên chính sách Hạn mức không hợp lệ được chỉ định trong chính sách Đặt lại hạn mức. Bạn có thể xem tên của chính sách Hạn mức trên chuỗi lỗi. Ví dụ: trong chuỗi lỗi sau, tên chính sách Hạn mức là MyQuotaPolicy:

    "faultstring": "Invalid rate limit policy MyQuotaPolicy"
    
  2. Kiểm tra từng chính sách Đặt lại hạn mức trong Proxy API nơi xảy ra lỗi đã xảy ra. Xác định chính sách Đặt lại hạn mức cụ thể trong chính sách về Hạn mức được chỉ định trong phần tử bắt buộc <Quota> khớp với tên đã xác định trong Bước 1 ở trên.

    Ví dụ: chính sách Đặt lại hạn mức sau đây chỉ định một chính sách về Hạn mức có tên MyQuotaPolicy khớp với nội dung trong chuỗi lỗi:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ResetQuota async="false" continueOnError="false" enabled="true" name="Reset_Quota_Demo">
        <DisplayName>Reset_Quota_Demo</DisplayName>
        <Properties/>
        <Quota name="MyQuotaPolicy">
           <Identifier name="identifierName" ref="request.header.identifier">
                <Allow>100</Allow>
            </Identifier>
        </Quota>
    </ResetQuota>
    
    
  3. Xác định xem chính sách Hạn mức này có được tạo và xác định trong cùng một proxy API hay không. Nếu chính sách Hạn mức không tồn tại trong cùng một proxy API, thì đó là nguyên nhân gây ra lỗi.

    Trong ví dụ trên, chính sách Hạn mức MyQuotaPolicy phải tồn tại trong quy trình trước khi thực thi chính sách Đặt lại hạn mức Reset_Quota_Demo.

    Vì Chính sách về hạn mức MyQuotaPolicy không tồn tại trong luồng, bạn sẽ nhận được mã lỗi:

"errorcode": "policies.resetquota.InvalidRLPolicy"

Độ phân giải

Đảm bảo rằng Chính sách về hạn mức đã khai báo trong phần tử <Quota> được xác định trong Proxy API. Chính sách về hạn mức mục tiêu này phải được cung cấp khi áp dụng chính sách Đặt lại hạn mức mục tiêu thực thi.

FailedToResolveAllowCountRef

Mã lỗi

policies.resetquota.FailedToResolveAllowCountRef

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

Failed to resolve allow count reference reference_name for identifier identifier_name
in ResetQuotaStepDefinition:policy_name;API Proxy:proxy_name;Revision:
revision_number;Environment:env_name;Organization:org_name

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

Failed to resolve allow count reference request.header.allowcount for identifier
identifierName in ResetQuotaStepDefinition:ResetQuota;API Proxy:Reset_Quota;
Revision:10;Environment:test;Organization:demo

Lỗi được trả về ứng dụng sẽ đơn giản là: policies.ratelimit.QuotaViolation.

Nguyên nhân

Lỗi này xảy ra nếu tham chiếu đến biến chứa số lượng cho phép trong hệ thống không thể phân giải phần tử <Allow> của chính sách thành một giá trị. Chiến dịch này là phần tử bắt buộc và chỉ định số tiền để giảm bộ đếm hạn mức.

Chẩn đoán

  1. Xác định chính sách Đặt lại hạn mức đã xảy ra lỗi và tên của biến tham chiếu không thể được phân giải. Bạn có thể tìm thấy cả hai mục này trong phần phản hồi lỗi.

    Ví dụ: trong faultstring sau đây, tên chính sách là ResetQuota và tham chiếu là request.header.allowcount:

    Failed to resolve allow count reference request.header.allowcount for identifier
    identifierName in ResetQuotaStepDefinition:ResetQuota;API Proxy:Reset_Quota;
    Revision:10;Environment:test;Organization:demo
    
  2. Trong tệp XML của chính sách Đặt lại hạn mức không thành công, hãy xác minh rằng tên của tham chiếu biến được sử dụng khớp với tên tham chiếu đã xác định trong phản hồ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.allowcount khớp với nội dung trong lỗi:

    <ResetQuota async="false" continueOnError="false" enabled="true" name="ResetQuota">
        <DisplayName>ResetQuota</DisplayName>
        <Properties/>
        <Quota name="MyQuotaPolicy">
            <Identifier name="identifierName">
                <Allow ref="request.header.allowcount"/>
            </Identifier>
        </Quota>
    </ResetQuota>
    
  3. Xác định xem biến tham chiếu đã được xác định và có sẵn trong luồng trong mà chính sách Đặt lại hạn mức sẽ thực thi.

  4. Nếu biến là:

    1. ngoài phạm vi (không áp dụng trong quy trình cụ thể nơi chính sách đang được thực thi) hoặc
    2. không thể giải quyết (không xác định)

    thì đó là nguyên nhân gây ra lỗi.

    Trong ví dụ ở trên, giá trị của số lượng được phép trong phần tử <Allow> phải được truy xuất từ tiêu đề yêu cầu có tên allowcount. Tuy nhiên, Edge không thể phân giải request.header.allowcount. Điều này xảy ra nếu tiêu đề allowcount không được chuyển như một phần của yêu cầu API.

    Dưới đây là yêu cầu API mẫu không vượt qua phần tiêu đề allowcount của yêu cầu:

    curl -v http://demo-eval-test.apigee.net/v1/reset_quota -H "Content-Type: application/json"
    

    Do tiêu đề allowcount không được chuyển như một phần của yêu cầu, biến request.header.allowcount được dùng trong phần tử <Allow> trong phần Đặt lại ở trên Chính sách về hạn mức chưa được xác định nên không thể giải quyết. Vì vậy, bạn sẽ nhận được phản hồi lỗi:

    Failed to resolve allow count reference request.header.allowcount for identifier
    identifierName in ResetQuotaStepDefinition:ResetQuota;API Proxy:Reset_Quota;
    Revision:10;Environment:test;Organization:demo
    

Độ phân giải

Đảm bảo biến được tham chiếu trong phần tử <Allow> tồn tại/đã được xác định và có sẵn trong quy trình cụ thể, nơi thực thi chính sách Đặt lại hạn mức.

Để sửa ví dụ nêu trên, bạn có thể sửa đổi yêu cầu để bao gồm allowcount như sau:

curl -v http://demo-eval-test.apigee.net/v1/reset_quota -H "Content-Type: application/json" -H "allowcount:30"

FailedToResolveRLPolicy

Mã lỗi

policies.resetquota.FailedToResolveRLPolicy

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

{
    "fault": {
        "faultstring": "Failed to resolve rate limit policy",
        "detail": {
            "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
        }
    }
}

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

{
    "fault": {
        "faultstring": "Failed to resolve rate limit policy",
        "detail": {
            "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
        }
    }
}

Nguyên nhân

Lỗi này xảy ra nếu không thể phân giải biến được tham chiếu bằng thuộc tính ref trong phần tử <Quota>.

Ví dụ: nếu thuộc tính ref được đặt là request.header.quotapolicy trong giá trị <Quota> nhưng không có trong luồng proxy API, thì bạn sẽ nhận được lỗi trên.

<Quota ref="request.header.quotapolicy">

Chẩn đoán

  1. Kiểm tra từng chính sách Đặt lại hạn mức trong Proxy API nơi xảy ra lỗi và xác định chính sách Đặt lại hạn mức, trong đó có tên của tham chiếu biến được chỉ định trong phần tử <Quota> không thể được giải quyết đúng cách.

  2. Xác định xem biến đó đã được định nghĩa và có sẵn trong luồng mà từ đó Việc đặt lại chính sách về hạn mức sẽ thực thi.

  3. Nếu biến là:

    1. ngoài phạm vi (không có trong luồng cụ thể mà chính sách thực thi) hoặc
    2. không thể giải quyết (không xác định)

    thì đó là nguyên nhân gây ra lỗi.

    Trong ví dụ bên dưới, tên của chính sách Hạn mức mục tiêu phải là được truy xuất từ tiêu đề yêu cầu có tên quotapolicy. Tuy nhiên, Edge không thể để giải quyết request.header.quotapolicy. Điều này xảy ra nếu chính sách hạn mức của tiêu đề không được chuyển như một phần của yêu cầu API.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ResetQuota async="false" continueOnError="false" enabled="true" name="Reset_Quota_Demo">
        <DisplayName>Reset_Quota_Demo</DisplayName>
        <Properties/>
        <Quota ref="request.header.quotapolicy">
            <Identifier name="identifierName" ref="request.header.identifier">
                <Allow>100</Allow>
            </Identifier>
        </Quota>
    </ResetQuota>
    

    Dưới đây là một yêu cầu API mẫu không vượt qua quotapolicy tiêu đề dưới dạng của yêu cầu:

    curl -v http://demo-eval-test.apigee.net/v1/reset_quota -H "Content-Type: application/json"
    

    Do tiêu đề quotapolicy không được chuyển như một phần của yêu cầu, tham chiếu request.header.quotapolicy được dùng trong phần tử <Quota> trong phần Đặt lại ở trên Chính sách về hạn mức không xác định và không thể giải quyết. Do đó, bạn sẽ nhận được phản hồi lỗi:

    "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
    

Độ phân giải

Đảm bảo rằng thuộc tính ref được tham chiếu trong phần tử <Quota> phân giải tại thời gian chạy và có sẵn trong quy trình cụ thể, nơi chính sách Đặt lại hạn mức sẽ thực thi.

Để sửa ví dụ hiển thị ở trên, bạn có thể sửa đổi yêu cầu để bao gồm tiêu đề quotapolicy như sau:

curl -v http://demo-eval-test.apigee.net/v1/reset_quota -H "Content-Type: application/json" -H "quotapolicy:MyQuotaPolicy"