Chính sách định mức

Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào tài liệu Apigee X.
Thông tin

Nội dung

Sử dụng chính sách Hạn mức để định cấu hình số lượng thông báo yêu cầu mà một proxy API cho phép trong một khoảng thời gian, chẳng hạn như một phút, giờ, ngày, tuần hoặc tháng. Bạn có thể đặt hạn mức giống nhau cho tất cả các ứng dụng truy cập vào proxy API hoặc bạn có thể đặt hạn mức dựa trên:

  • Sản phẩm chứa proxy API
  • Ứng dụng yêu cầu API
  • Nhà phát triển ứng dụng
  • Nhiều tiêu chí khác

Đừng sử dụng Hạn mức để ngăn chặn tình trạng lưu lượng truy cập tăng đột biến nói chung. Để làm việc đó, hãy sử dụng chính sách Chặn đột biến. Xem Chính sách về tính năng Chặn đột biến.

Video

Những video này giới thiệu về việc quản lý hạn mức bằng chính sách Hạn mức:

Giới thiệu (New Edge)

Intro (Classic Edge)

Hạn mức linh hoạt

Phân tán và đồng bộ

Trọng lượng thông báo

Lịch

Khoảng thời gian qua (tính cả hôm nay)

Flexi

Hạn mức có điều kiện

Biến luồng

Xử lý lỗi

Mẫu

Các mã mẫu chính sách này minh hoạ cách bắt đầu và kết thúc các khoảng thời gian hạn mức bằng cách:

Hạn mức linh hoạt hơn

<Quota name="CheckQuota">
  <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.quota.interval">1</Interval>
  <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.quota.timeunit">hour</TimeUnit>
  <Allow count="200" countRef="verifyapikey.verify-api-key.apiproduct.developer.quota.limit"/>
</Quota>

Hạn mức linh động cho phép bạn định cấu hình một chính sách Hạn mức duy nhất để thực thi các chế độ cài đặt Hạn mức khác nhau dựa trên thông tin được truyền đến chính sách Hạn mức. Một thuật ngữ khác cho chế độ cài đặt Hạn mức trong ngữ cảnh này là "Gói dịch vụ". Hạn mức linh hoạt sẽ kiểm tra "Gói dịch vụ" của các ứng dụng, sau đó thực thi những chế độ cài đặt đó.

Lưu ý: Nếu bạn chỉ định cả giá trị và thông tin tham chiếu cho một phần tử, thì thông tin tham chiếu sẽ được ưu tiên. Nếu tham chiếu không phân giải được trong thời gian chạy, thì giá trị sẽ được sử dụng.

Ví dụ: khi tạo một sản phẩm API, bạn có thể tuỳ ý đặt hạn mức, đơn vị thời gian và khoảng thời gian được phép. Tuy nhiên, việc đặt các giá trị này trên sản phẩm API không bắt buộc phải sử dụng các giá trị đó trong một proxy API. Bạn cũng phải thêm một chính sách Hạn mức vào API proxy đọc các giá trị này. Hãy xem phần Tạo sản phẩm API để biết thêm thông tin.

Trong ví dụ trên, proxy API chứa chính sách Hạn mức sẽ sử dụng chính sách VerifyAPIKey (xác minh khoá API), có tên là verify-api-key, để xác thực khoá API được truyền trong một yêu cầu. Sau đó, chính sách Hạn mức sẽ truy cập vào các biến luồng từ chính sách VerifyAPIKey để đọc các giá trị hạn mức được đặt trên sản phẩm API. Để biết thêm thông tin về các biến luồng VerifyAPIKey, hãy xem phần Chính sách Xác minh khoá API.

Một lựa chọn khác là đặt các thuộc tính tuỳ chỉnh cho từng nhà phát triển hoặc ứng dụng, sau đó đọc các giá trị đó trong chính sách Hạn mức. Ví dụ: bạn muốn đặt các giá trị hạn mức khác nhau cho mỗi nhà phát triển. Trong trường hợp này, bạn đặt các thuộc tính tuỳ chỉnh trên nhà phát triển có chứa giới hạn, đơn vị thời gian và khoảng thời gian. Sau đó, bạn tham chiếu các giá trị này trong chính sách Hạn mức như minh hoạ bên dưới:

<Quota name="DeveloperQuota">
  <Identifier ref="verifyapikey.verify-api-key.client_id"/>
  <Interval ref="verifyapikey.verify-api-key.developer.timeInterval"/>
  <TimeUnit ref="verifyapikey.verify-api-key.developer.timeUnit"/>
  <Allow countRef="verifyapikey.verify-api-key.developer.limit"/>
</Quota>

Ví dụ này cũng sử dụng các biến luồng VerifyAPIKey để tham chiếu các thuộc tính tuỳ chỉnh được đặt trên nhà phát triển.

Bạn có thể sử dụng bất kỳ biến nào để đặt các tham số của chính sách Hạn mức. Những biến đó có thể đến từ:

  • Biến luồng
  • Các thuộc tính trên sản phẩm, ứng dụng hoặc nhà phát triển API
  • Bản đồ khoá-giá trị (KVM)
  • Tiêu đề, tham số truy vấn, tham số biểu mẫu, v.v.

Đối với mỗi proxy API, bạn có thể thêm một chính sách Hạn mức tham chiếu đến cùng một biến như tất cả các chính sách Hạn mức khác trong tất cả các proxy khác, hoặc chính sách Hạn mức có thể tham chiếu đến các biến riêng biệt cho chính sách và proxy đó.

Thời gian bắt đầu

<Quota name="QuotaPolicy" type="calendar">
  <StartTime>2017-02-18 10:30:00</StartTime>
  <Interval>5</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="99"/>
</Quota>

Đối với một Hạn mức có type được đặt thành calendar, bạn phải xác định một giá trị <StartTime> rõ ràng. Giá trị thời gian là giờ GMT, không phải giờ địa phương. Nếu bạn không cung cấp giá trị <StartTime> cho một chính sách thuộc loại calendar, thì Edge sẽ đưa ra lỗi.

Bộ đếm hạn mức cho mỗi ứng dụng được làm mới dựa trên các giá trị <StartTime>, <Interval><TimeUnit>. Trong ví dụ này, Hạn mức bắt đầu tính từ 10:30 sáng theo giờ GMT ngày 18 tháng 2 năm 2017 và làm mới sau mỗi 5 giờ. Do đó, lần làm mới tiếp theo là vào 15:30 ngày 18 tháng 2 năm 2017 theo giờ GMT.

Bộ đếm lượt truy cập

<Quota name="QuotaPolicy">
  <Interval>5</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="99"/>
</Quota>

Một proxy API có quyền truy cập vào các biến luồng do chính sách Hạn mức đặt. Bạn có thể truy cập vào các biến luồng này trong proxy API để thực hiện quy trình xử lý có điều kiện, theo dõi chính sách khi gần đạt đến hạn mức, trả về bộ đếm hạn mức hiện tại cho một ứng dụng hoặc vì những lý do khác.

Vì việc truy cập vào các biến luồng cho chính sách dựa trên thuộc tính name của chính sách, nên đối với chính sách có tên QuotaPolicy ở trên, bạn sẽ truy cập vào các biến luồng của chính sách đó dưới dạng:

  • ratelimit.QuotaPolicy.allowed.count: Số lượng được phép.
  • ratelimit.QuotaPolicy.used.count: Giá trị hiện tại của bộ đếm.
  • ratelimit.QuotaPolicy.expiry.time: Thời gian UTC khi bộ đếm đặt lại.

Bạn có thể truy cập vào nhiều biến luồng khác, như mô tả dưới đây.

Ví dụ: bạn có thể sử dụng chính sách AssignMessage sau đây để trả về các giá trị của biến luồng Quota dưới dạng tiêu đề phản hồi:

<AssignMessage async="false" continueOnError="false" enabled="true" name="ReturnQuotaVars">
    <AssignTo createNew="false" type="response"/>
    <Set>
        <Headers>
            <Header name="QuotaLimit">{ratelimit.QuotaPolicy.allowed.count}</Header>
            <Header name="QuotaUsed">{ratelimit.QuotaPolicy.used.count}</Header>
            <Header name="QuotaResetUTC">{ratelimit.QuotaPolicy.expiry.time}</Header>
        </Headers>
    </Set>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</AssignMessage>

Yêu cầu đầu tiên

<Quota name="MyQuota">
  <Interval>1</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="10000"/>
</Quota>

Sử dụng mã mẫu này để thực thi hạn mức 10.000 lệnh gọi mỗi giờ. Chính sách này sẽ đặt lại bộ đếm hạn mức vào đầu mỗi giờ. Nếu bộ đếm đạt đến hạn mức 10.000 cuộc gọi trước khi hết giờ, thì những cuộc gọi vượt quá 10.000 sẽ bị từ chối.

Ví dụ: nếu bộ đếm bắt đầu ở 2017-07-08 07:00:00, thì bộ đếm sẽ đặt lại về 0 ở 2017-07-08 08:00:00 (1 giờ kể từ thời gian bắt đầu). Nếu tin nhắn đầu tiên được nhận lúc 2017-07-08 07:35:28 và số lượng tin nhắn đạt đến 10.000 trước 2017-07-08 08:00:00, thì các lệnh gọi vượt quá số lượng đó sẽ bị từ chối cho đến khi số lượng được đặt lại vào đầu giờ.

Thời gian đặt lại bộ đếm dựa trên sự kết hợp của <Interval><TimeUnit>. Ví dụ: nếu bạn đặt <Interval> thành 12 cho <TimeUnit> là giờ, thì bộ đếm sẽ đặt lại sau mỗi 12 giờ. Bạn có thể đặt <TimeUnit> thành phút, giờ, ngày, tuần hoặc tháng.

Bạn có thể tham chiếu chính sách này ở nhiều nơi trong proxy API. Ví dụ: bạn có thể đặt nó trên Proxy PreFlow để thực thi trên mọi yêu cầu. Hoặc bạn có thể đặt nó trên nhiều luồng trong proxy API. Nếu bạn sử dụng chính sách này ở nhiều nơi trong proxy, thì chính sách này sẽ duy trì một bộ đếm duy nhất được cập nhật bởi tất cả các phiên bản của chính sách.

Ngoài ra, bạn có thể xác định nhiều chính sách Hạn mức trong API proxy. Mỗi chính sách Hạn mức đều duy trì bộ đếm riêng, dựa trên thuộc tính name của chính sách.

Đặt giá trị nhận dạng

<Quota name="QuotaPolicy" type="calendar">
  <Identifier ref="request.header.clientId"/>
  <StartTime>2017-02-18 10:00:00</StartTime>
  <Interval>5</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="99"/>
</Quota>

Theo mặc định, chính sách Hạn mức xác định một bộ đếm duy nhất cho proxy API, bất kể nguồn gốc của yêu cầu. Ngoài ra, bạn có thể sử dụng thuộc tính <Identifier> với chính sách Hạn mức để duy trì các bộ đếm riêng biệt dựa trên giá trị của thuộc tính <Identifier>.

Ví dụ: sử dụng thẻ <Identifier> để xác định các bộ đếm riêng biệt cho từng mã nhận dạng khách hàng. Khi có yêu cầu đến proxy của bạn, ứng dụng khách sẽ truyền một tiêu đề chứa clientID, như trong ví dụ ở trên.

Bạn có thể chỉ định bất kỳ biến luồng nào cho thuộc tính <Identifier>. Ví dụ: bạn có thể chỉ định rằng một tham số truy vấn có tên id chứa giá trị nhận dạng duy nhất:

<Identifier ref="request.queryparam.id"/>

Nếu sử dụng chính sách VerifyAPIKey để xác thực khoá API hoặc chính sách OAuthV2 bằng mã thông báo OAuth, bạn có thể sử dụng thông tin trong khoá API hoặc mã thông báo để xác định các bộ đếm riêng lẻ cho cùng một chính sách Hạn mức. Ví dụ: thẻ <Identifier> sau đây sử dụng biến luồng client_id của một chính sách VerifyAPIKey có tên là verify-api-key:

<Identifier ref="verifyapikey.verify-api-key.client_id"></Identifier>

Giờ đây, mỗi giá trị client_id riêng biệt sẽ xác định bộ đếm riêng trong chính sách Hạn mức.

Lớp

<Quota name="QuotaPolicy">
  <Interval>1</Interval>
  <TimeUnit>day</TimeUnit>
  <Allow>
    <Class ref="request.header.developer_segment">
      <Allow class="platinum" count="10000"/>
      <Allow class="silver" count="1000" />
    </Class>
  </Allow>
</Quota>

Bạn có thể đặt giới hạn Hạn mức một cách linh hoạt bằng cách sử dụng số lượng Hạn mức dựa trên lớp. Trong ví dụ này, hạn mức được xác định bằng giá trị của tiêu đề developer_segment được truyền theo từng yêu cầu. Biến đó có thể có giá trị platinum hoặc silver. Nếu tiêu đề có giá trị không hợp lệ, chính sách sẽ trả về lỗi vi phạm hạn mức.


Giới thiệu về Chính sách hạn mức

Hạn mức là số lượng thông báo yêu cầu mà một proxy API có thể xử lý trong một khoảng thời gian, chẳng hạn như phút, giờ, ngày, tuần hoặc tháng. Chính sách này duy trì các bộ đếm để tính tổng số yêu cầu mà proxy API nhận được. Khả năng này cho phép nhà cung cấp API thực thi các giới hạn về số lượng lệnh gọi API mà ứng dụng thực hiện trong một khoảng thời gian. Ví dụ: bằng cách sử dụng chính sách về hạn mức, bạn có thể giới hạn số lượng yêu cầu của ứng dụng ở mức 1 yêu cầu mỗi phút hoặc 10.000 yêu cầu mỗi tháng.

Ví dụ: Nếu Hạn mức được xác định là 10.000 tin nhắn mỗi tháng, thì việc điều chỉnh tốc độ sẽ bắt đầu sau tin nhắn thứ 10.000. Không quan trọng là 10.000 thông báo được tính vào ngày đầu tiên hay ngày cuối cùng của khoảng thời gian đó; bạn không được phép gửi thêm yêu cầu cho đến khi bộ đếm Hạn mức tự động đặt lại vào cuối khoảng thời gian đã chỉ định hoặc cho đến khi Hạn mức được đặt lại rõ ràng bằng cách sử dụng Chính sách đặt lại hạn mức.

Một biến thể của Hạn mức có tên là SpikeArrest giúp ngăn chặn tình trạng lưu lượng truy cập tăng đột biến (hoặc tăng vọt) có thể do mức sử dụng tăng đột ngột, ứng dụng gặp lỗi hoặc các cuộc tấn công độc hại. Để biết thêm thông tin về SpikeArrest, hãy xem Chính sách về Spike Arrest.

Hạn mức áp dụng cho từng proxy API và không được phân phối giữa các proxy API. Ví dụ: nếu bạn có 3 proxy API trong một sản phẩm API, thì một hạn mức duy nhất sẽ không được chia sẻ trên cả 3 proxy, ngay cả khi cả 3 proxy đều sử dụng cùng một cấu hình chính sách hạn mức.

Các loại chính sách về hạn mức

Chính sách Hạn mức hỗ trợ nhiều loại chính sách: mặc định, calendar, flexirollingwindow. Mỗi loại xác định thời điểm bắt đầu và thời điểm đặt lại bộ đếm hạn mức, như minh hoạ trong bảng sau:

Đơn vị Thời gian Đặt lại về mặc định (hoặc giá trị rỗng) đặt lại lịch flexi reset
phút Bắt đầu từ phút tiếp theo Một phút sau <StartTime> Một phút sau yêu cầu đầu tiên
giờ Đầu giờ tới Một giờ sau <StartTime> Một giờ sau yêu cầu đầu tiên
ngày Nửa đêm theo giờ chuẩn Greenwich của ngày hiện tại 24 giờ sau <StartTime> 24 giờ sau yêu cầu đầu tiên
tuần Nửa đêm theo giờ GMT vào Chủ Nhật cuối tuần Một tuần sau <StartTime> Một tuần sau yêu cầu đầu tiên
tháng Nửa đêm GMT vào ngày cuối cùng của tháng Một tháng (28 ngày) sau <StartTime> Một tháng (28 ngày) sau lần yêu cầu đầu tiên

Đối với type="calendar", bạn phải chỉ định giá trị của <StartTime>.

Bảng này không liệt kê giá trị cho loại rollingwindow. Hạn mức theo khoảng thời gian cố định hoạt động bằng cách đặt kích thước của "khoảng thời gian" hạn mức, chẳng hạn như khoảng thời gian một giờ hoặc một ngày. Khi có một yêu cầu mới, chính sách sẽ xác định xem hạn mức có bị vượt quá trong "khoảng thời gian" trước đó hay không.

Ví dụ: bạn xác định một khoảng thời gian 2 giờ cho phép 1.000 yêu cầu. Một yêu cầu mới xuất hiện lúc 4:45 chiều.Chính sách này tính số lượng hạn mức cho khoảng thời gian 2 giờ qua, tức là số lượng yêu cầu kể từ 2:45 chiều. Nếu chưa vượt quá hạn mức trong khoảng thời gian 2 giờ đó, thì yêu cầu sẽ được phép.

Một phút sau, lúc 4:46 chiều, một yêu cầu khác xuất hiện. Giờ đây, chính sách này sẽ tính số lượng hạn mức kể từ 14:46 để xác định xem bạn có vượt quá giới hạn hay không.

Đối với loại rollingwindow, bộ đếm sẽ không bao giờ đặt lại, nhưng sẽ được tính toán lại trên mỗi yêu cầu.

Tìm hiểu về bộ đếm hạn mức

Theo mặc định, chính sách Hạn mức duy trì một bộ đếm duy nhất, bất kể bạn tham chiếu bộ đếm đó bao nhiêu lần trong một proxy API. Tên của bộ đếm hạn mức dựa trên thuộc tính name của chính sách.

Ví dụ: bạn tạo một chính sách Hạn mức có tên là MyQuotaPolicy với giới hạn là 5 yêu cầu và đặt chính sách này trên nhiều luồng (Luồng A, B và C) trong proxy API. Mặc dù được dùng trong nhiều luồng, nhưng nó vẫn duy trì một bộ đếm duy nhất được cập nhật bởi tất cả các phiên bản của chính sách:

  • Quy trình A được thực thi -> MyQuotaPolicy được thực thi và bộ đếm của quy trình này = 1
  • Quy trình B được thực thi -> MyQuotaPolicy được thực thi và bộ đếm của quy trình này = 2
  • Quy trình A được thực thi -> MyQuotaPolicy được thực thi và bộ đếm của quy trình này = 3
  • Quy trình C được thực thi -> MyQuotaPolicy được thực thi và bộ đếm của quy trình này = 4
  • Quy trình A được thực thi -> MyQuotaPolicy được thực thi và bộ đếm của quy trình này = 5

Yêu cầu tiếp theo đối với bất kỳ luồng nào trong số 3 luồng này đều bị từ chối vì bộ đếm hạn mức đã đạt đến giới hạn.

Việc sử dụng cùng một chính sách Hạn mức ở nhiều nơi trong một quy trình proxy API (có thể vô tình khiến Hạn mức hết nhanh hơn dự kiến) là một mô hình phản tác dụng được mô tả trong The Book of Apigee Edge Antipatterns (Sách về các mô hình phản tác dụng của Apigee Edge).

Ngoài ra, bạn có thể xác định nhiều chính sách Hạn mức trong proxy API và sử dụng một chính sách khác trong mỗi luồng. Mỗi chính sách Hạn mức đều duy trì bộ đếm riêng, dựa trên thuộc tính name của chính sách.

Hoặc sử dụng các phần tử <Class> hoặc <Identifier> trong chính sách Hạn mức để xác định nhiều bộ đếm riêng biệt trong một chính sách duy nhất. Bằng cách sử dụng các phần tử này, một chính sách duy nhất có thể duy trì nhiều bộ đếm dựa trên ứng dụng đưa ra yêu cầu, nhà phát triển ứng dụng đưa ra yêu cầu, mã ứng dụng khách hoặc giá trị nhận dạng ứng dụng khách khác, v.v. Hãy xem các ví dụ ở trên để biết thêm thông tin về cách sử dụng phần tử <Class> hoặc <Identifier>.

Ký hiệu thời gian

Tất cả thời gian trong Hạn mức đều được đặt theo múi giờ Giờ phối hợp quốc tế (UTC).

Ký hiệu thời gian hạn mức tuân theo ký hiệu ngày theo tiêu chuẩn quốc tế được xác định trong Tiêu chuẩn quốc tế ISO 8601.

Ngày được xác định là năm, tháng và ngày, theo định dạng sau: YYYY-MM-DD. Ví dụ: 2015-02-04 biểu thị ngày 4 tháng 2 năm 2015.

Thời gian trong ngày được xác định là giờ, phút và giây theo định dạng sau: hours:minutes:seconds. Ví dụ: 23:59:59 biểu thị thời gian một giây trước nửa đêm.

Xin lưu ý rằng có 2 ký hiệu là 00:00:0024:00:00 để phân biệt 2 thời điểm nửa đêm có thể liên kết với một ngày. Do đó, 2015-02-04 24:00:00 có cùng ngày và giờ với 2015-02-05 00:00:00. Cách sau thường được ưu tiên hơn.

Nhận chế độ cài đặt hạn mức từ cấu hình sản phẩm API

Bạn có thể đặt hạn mức trong cấu hình sản phẩm API. Những giới hạn đó không tự động thực thi hạn mức. Thay vào đó, bạn có thể tham chiếu các chế độ cài đặt hạn mức sản phẩm trong một chính sách hạn mức. Sau đây là một số lợi ích của việc đặt hạn mức cho sản phẩm để chính sách hạn mức tham chiếu:

  • Chính sách hạn mức có thể sử dụng một chế độ cài đặt thống nhất trên tất cả các proxy API trong sản phẩm API.
  • Bạn có thể thực hiện các thay đổi trong thời gian chạy đối với chế độ cài đặt hạn mức trên một sản phẩm API và các chính sách hạn mức tham chiếu đến giá trị sẽ tự động cập nhật các giá trị hạn mức.

Để biết thêm thông tin về cách sử dụng chế độ cài đặt hạn mức từ một sản phẩm API, hãy xem ví dụ "Hạn mức động" ở trên..

Để biết thông tin về cách định cấu hình các sản phẩm API có giới hạn hạn mức, hãy xem phần Tạo sản phẩm API.

Tham chiếu phần tử

Sau đây là các phần tử và thuộc tính mà bạn có thể định cấu hình trên chính sách này. Xin lưu ý rằng một số tổ hợp phần tử là loại trừ lẫn nhau hoặc không bắt buộc. Hãy xem các mẫu để biết cách sử dụng cụ thể. Các biến verifyapikey.VerifyAPIKey.apiproduct.* bên dưới có sẵn theo mặc định khi chính sách Xác minh khoá API có tên "VerifyAPIKey" được dùng để kiểm tra khoá API của ứng dụng trong yêu cầu. Các giá trị biến đến từ chế độ cài đặt hạn mức trên sản phẩm API mà khoá được liên kết, như mô tả trong phần Nhận chế độ cài đặt hạn mức từ cấu hình sản phẩm API.

<Quota async="false" continueOnError="false" enabled="true" name="Quota-3" type="calendar">
   <DisplayName>Quota 3</DisplayName>
   <Allow count="2000" countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/>
   <Allow>
      <Class ref="request.queryparam.time_variable">
        <Allow class="peak_time" count="5000"/>
        <Allow class="off_peak_time" count="1000"/>
      </Class>
   </Allow>
   <Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.interval">1</Interval>
   <TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.timeunit">month</TimeUnit>
   <StartTime>2017-7-16 12:00:00</StartTime>
   <Distributed>false</Distributed>
   <Synchronous>false</Synchronous>
   <AsynchronousConfiguration>
      <SyncIntervalInSeconds>20</SyncIntervalInSeconds>
      <SyncMessageCount>5</SyncMessageCount>
   </AsynchronousConfiguration>
   <Identifier/>
   <MessageWeight/>
</Quota>

Thuộc tính <Quota>

<Quota async="false" continueOnError="false" enabled="true" name="Quota-3" type="calendar">

Các thuộc tính sau đây dành riêng cho chính sách này.

Thuộc tính Mô tả Mặc định Sự hiện diện
loại

Sử dụng để xác định thời điểm và cách thức bộ đếm hạn mức kiểm tra mức sử dụng hạn mức. Hãy xem Các loại chính sách hạn mức để biết thêm thông tin.

Nếu bạn bỏ qua giá trị type, bộ đếm sẽ bắt đầu từ đầu phút/giờ/ngày/tuần/tháng.

Các giá trị hợp lệ bao gồm:

  • calendar: Định cấu hình hạn mức dựa trên thời gian bắt đầu cụ thể. Bộ đếm Hạn mức cho mỗi ứng dụng được làm mới dựa trên các giá trị <StartTime>, <Interval><TimeUnit> mà bạn đặt.
  • rollingwindow: Định cấu hình một hạn mức sử dụng "cửa sổ trượt" để xác định mức sử dụng hạn mức. Với rollingwindow, bạn xác định kích thước của cửa sổ bằng các phần tử <Interval><TimeUnit>; ví dụ: 1 ngày. Khi nhận được một yêu cầu, Edge sẽ xem xét chính xác thời gian của yêu cầu đó (ví dụ: 17:01), đếm số lượng yêu cầu nhận được trong khoảng thời gian từ thời điểm đó đến 17:01 ngày hôm trước (1 ngày) và xác định xem hạn mức có bị vượt quá trong khoảng thời gian đó hay không.
  • flexi: Định cấu hình một hạn mức khiến bộ đếm bắt đầu khi nhận được thông báo yêu cầu đầu tiên từ một ứng dụng và đặt lại dựa trên các giá trị <Interval>, <TimeUnit>.
lịch Không bắt buộc

Bảng sau đây mô tả những thuộc tính chung cho tất cả phần tử mẹ của chính sách:

Thuộc tính Mô tả Mặc định Sự hiện diện
name

Tên nội bộ của chính sách. Giá trị của thuộc tính name có thể chứa chữ cái, số, dấu cách, dấu gạch nối, dấu gạch dưới và dấu chấm. Giá trị này không được vượt quá 255 ký tự.

(Không bắt buộc) Bạn có thể dùng phần tử <DisplayName> để gắn nhãn chính sách trong trình chỉnh sửa proxy giao diện người dùng quản lý bằng tên ngôn ngữ tự nhiên khác.

Không áp dụng Bắt buộc
continueOnError

Đặt thành false để trả về lỗi khi chính sách không thành công. Điều này là dự kiến đối với hầu hết các chính sách.

Đặt thành true để tiếp tục thực thi luồng ngay cả sau khi có chính sách không thành công.

false Không bắt buộc
enabled

Hãy đặt thành true để thực thi chính sách này.

Đặt thành false để tắt chính sách này. Chính sách này sẽ không được thực thi ngay cả khi luồng đó vẫn được liên kết với một luồng.

đúng Không bắt buộc
async

Thuộc tính này không được dùng nữa.

false Không được dùng nữa

&lt;DisplayName&gt; phần tử

Hãy sử dụng cùng với thuộc tính name để gắn nhãn chính sách trong phần trình chỉnh sửa proxy giao diện người dùng quản lý có tên ngôn ngữ tự nhiên khác.

<DisplayName>Policy Display Name</DisplayName>
Mặc định

Không áp dụng

Nếu bạn bỏ qua phần tử này, giá trị của thuộc tính name của chính sách sẽ là đã sử dụng.

Sự hiện diện Không bắt buộc
Loại Chuỗi

Phần tử <Allow>

Chỉ định giới hạn số lượng cho hạn mức. Nếu bộ đếm cho chính sách đạt đến giá trị giới hạn này, các lệnh gọi tiếp theo sẽ bị từ chối cho đến khi bộ đếm được đặt lại.

Sau đây là 3 cách đặt phần tử <Allow>:

<Allow count="2000"/>
<Allow countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/>
<Allow count="2000" countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/>

Nếu bạn chỉ định cả countcountRef, thì countRef sẽ được ưu tiên. Nếu countRef không phân giải được trong thời gian chạy, thì giá trị của count sẽ được sử dụng.

Mặc định: Không áp dụng
Sự hiện diện: Không bắt buộc
Loại: Số nguyên

Thuộc tính

Thuộc tính Mô tả Mặc định Sự hiện diện
số lượng

Dùng để chỉ định số lượng thư cho hạn mức.

Ví dụ: giá trị thuộc tính count là 100, Interval là 1 và TimeUnit là tháng chỉ định hạn mức 100 tin nhắn mỗi tháng.

2000 Không bắt buộc
countRef

Dùng để chỉ định một biến luồng chứa số lượng tin nhắn cho một hạn mức. countRef được ưu tiên hơn thuộc tính count.

không có Không bắt buộc

Phần tử <Allow>/<Class>

Phần tử <Class> cho phép bạn đặt điều kiện cho giá trị của phần tử <Allow> dựa trên giá trị của một biến luồng. Đối với mỗi thẻ con <Allow> khác nhau của <Class>, chính sách này duy trì một bộ đếm khác.

Để sử dụng phần tử <Class>, hãy chỉ định một biến luồng bằng cách sử dụng thuộc tính ref cho thẻ <Class>. Sau đó, Edge sẽ sử dụng giá trị của biến luồng để chọn một trong các thẻ con <Allow> nhằm xác định số lượng được phép của chính sách. Edge so khớp giá trị của biến luồng với thuộc tính class của thẻ <Allow>, như minh hoạ dưới đây:

<Allow>
  <Class ref="request.queryparam.time_variable">
    <Allow class="peak_time" count="5000"/>
    <Allow class="off_peak_time" count="1000"/>
  </Class>
</Allow>

Trong ví dụ này, bộ đếm hạn mức hiện tại được xác định bằng giá trị của tham số truy vấn time_variable được truyền theo từng yêu cầu. Biến đó có thể có giá trị peak_time hoặc off_peak_time. Nếu tham số truy vấn chứa một giá trị không hợp lệ, thì chính sách sẽ trả về lỗi vi phạm hạn mức.

Mặc định: Không áp dụng
Sự hiện diện: Không bắt buộc
Loại: Không áp dụng

Thuộc tính

Thuộc tính Mô tả Mặc định Sự hiện diện
ref

Dùng để chỉ định một biến luồng chứa lớp hạn mức cho một hạn mức.

không có Bắt buộc

Phần tử <Allow>/<Class>/<Allow>

Phần tử <Allow> chỉ định hạn mức cho bộ đếm hạn mức do phần tử <Class> xác định. Đối với mỗi thẻ con <Allow> khác nhau của <Class>, chính sách này duy trì một bộ đếm riêng.

Ví dụ:

<Allow>
  <Class ref="request.queryparam.time_variable">
    <Allow class="peak_time" count="5000"/>
    <Allow class="off_peak_time" count="1000"/>
  </Class>
</Allow>

Trong ví dụ này, chính sách Hạn mức duy trì 2 bộ đếm hạn mức có tên là peak_timeoff_peak_time.

Mặc định: Không áp dụng
Sự hiện diện: Không bắt buộc
Loại: Không áp dụng

Thuộc tính

Thuộc tính Mô tả Mặc định Sự hiện diện
lớp

Xác định tên của bộ đếm hạn mức.

không có Bắt buộc
số lượng Chỉ định hạn mức cho bộ đếm. không có Bắt buộc

Phần tử <Interval>

Dùng để chỉ định một số nguyên (ví dụ: 1, 2, 5, 60, v.v.) sẽ được ghép với TimeUnit mà bạn chỉ định (phút, giờ, ngày, tuần hoặc tháng) để xác định khoảng thời gian mà Edge tính toán mức sử dụng hạn ngạch.

Ví dụ: Interval24 với TimeUnithour có nghĩa là hạn mức sẽ được tính trong vòng 24 giờ.

<Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.interval">1</Interval>
Mặc định: không có
Sự hiện diện: Bắt buộc
Loại: Số nguyên

Thuộc tính

Thuộc tính Mô tả Mặc định Sự hiện diện
ref

Dùng để chỉ định một biến luồng chứa khoảng thời gian cho một hạn mức. ref được ưu tiên hơn giá trị khoảng thời gian rõ ràng. Nếu cả giá trị và giá trị tham chiếu đều được chỉ định, thì giá trị tham chiếu sẽ được ưu tiên. Nếu ref không phân giải tại thời gian chạy, thì giá trị sẽ được sử dụng.

không có Không bắt buộc

Phần tử <TimeUnit>

Dùng để chỉ định đơn vị thời gian áp dụng cho hạn mức.

Ví dụ: Interval24 với TimeUnithour có nghĩa là hạn mức sẽ được tính trong vòng 24 giờ.

<TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.timeunit">month</TimeUnit>
Mặc định: không có
Sự hiện diện: Bắt buộc
Loại:

Chuỗi. Chọn trong số minute, hour, day, week hoặc month.

Thuộc tính

Thuộc tính Mô tả Mặc định Sự hiện diện
ref Dùng để chỉ định một biến luồng chứa đơn vị thời gian cho một hạn mức. ref được ưu tiên hơn giá trị khoảng thời gian rõ ràng. Nếu ref không phân giải tại thời gian chạy, thì giá trị sẽ được sử dụng. không có Không bắt buộc

Phần tử <StartTime>

Khi type được đặt thành calendar,, hệ thống sẽ chỉ định ngày và giờ mà bộ đếm hạn mức sẽ bắt đầu đếm, bất kể có yêu cầu nào được nhận từ bất kỳ ứng dụng nào hay không.

Ví dụ:

<StartTime>2017-7-16 12:00:00</StartTime>
Mặc định: không có
Sự hiện diện: Bắt buộc khi type được đặt thành calendar.
Loại:

Chuỗi ở định dạng ngày và giờ ISO 8601.

Phần tử <Distributed>

Một bản cài đặt Edge có thể sử dụng một hoặc nhiều Trình xử lý thông báo để xử lý các yêu cầu. Đặt phần tử này thành true để chỉ định rằng chính sách phải duy trì một bộ đếm trung tâm và liên tục đồng bộ hoá bộ đếm đó trên tất cả các Trình xử lý thông báo. Các trình xử lý thông báo có thể nằm trên nhiều vùng có thể truy cập và/hoặc khu vực.

Nếu sử dụng giá trị mặc định là false, thì bạn có thể vượt quá hạn mức vì số lượng cho mỗi Trình xử lý thông báo không được chia sẻ:

<Distributed>true</Distributed>

Để đảm bảo rằng các bộ đếm được đồng bộ hoá và cập nhật trên mọi yêu cầu, hãy đặt <Distributed><Synchronous> thành true:

<Distributed>true</Distributed>
<Synchronous>true</Synchronous>
Mặc định: false
Sự hiện diện: Không bắt buộc
Loại: Boolean

Phần tử <Synchronous>

Đặt thành true để cập nhật đồng bộ bộ đếm hạn mức phân tán. Điều này có nghĩa là quá trình cập nhật bộ đếm được thực hiện đồng thời với quá trình kiểm tra hạn mức đối với một yêu cầu gửi đến API. Đặt thành true nếu bạn không được phép thực hiện bất kỳ lệnh gọi API nào vượt quá hạn mức.

Đặt thành false để cập nhật bộ đếm hạn mức không đồng bộ. Điều này có nghĩa là có thể một số lệnh gọi API vượt quá hạn mức sẽ được thực hiện, tuỳ thuộc vào thời điểm bộ đếm hạn mức trong kho lưu trữ trung tâm được cập nhật không đồng bộ. Tuy nhiên, bạn sẽ không gặp phải những tác động tiềm ẩn đến hiệu suất liên quan đến các bản cập nhật đồng bộ.

Khoảng thời gian cập nhật không đồng bộ mặc định là 10 giây. Sử dụng phần tử AsynchronousConfiguration để định cấu hình hành vi không đồng bộ này.

<Synchronous>false</Synchronous>
Mặc định: false
Sự hiện diện: Không bắt buộc
Loại: Boolean

Phần tử <AsynchronousConfiguration>

Định cấu hình khoảng thời gian đồng bộ hoá giữa các bộ đếm hạn mức phân tán khi phần tử cấu hình chính sách <Synchronous> không có hoặc có và được đặt thành false.

Bạn có thể đồng bộ hoá sau một khoảng thời gian hoặc một số lượng tin nhắn, bằng cách sử dụng phần tử con SyncIntervalInSeconds hoặc SyncMessageCount. Chúng loại trừ lẫn nhau. Ví dụ:

<AsynchronousConfiguration>
   <SyncIntervalInSeconds>20</SyncIntervalInSeconds>
</AsynchronousConfiguration>

hoặc

<AsynchronousConfiguration>
   <SyncMessageCount>5</SyncMessageCount>
</AsynchronousConfiguration>
Mặc định: SyncIntervalInSeconds = 10 giây
Sự hiện diện: Không bắt buộc; bị bỏ qua khi <Synchronous> được đặt thành true.
Loại:

Khu vực khép kín

<AsynchronousConfiguration>/<SyncIntervalInSeconds> phần tử

Sử dụng phương thức này để ghi đè hành vi mặc định, trong đó các bản cập nhật không đồng bộ được thực hiện sau khoảng thời gian 10 giây.

<AsynchronousConfiguration>
   <SyncIntervalInSeconds>20</SyncIntervalInSeconds>
</AsynchronousConfiguration>

Khoảng thời gian đồng bộ hoá phải >= 10 giây như mô tả trong chủ đề Giới hạn.

Mặc định: 10
Sự hiện diện: Không bắt buộc
Loại:

Số nguyên

Phần tử <AsynchronousConfiguration>/<SyncMessageCount>

Chỉ định số lượng yêu cầu trên tất cả các trình xử lý thông báo Apigee giữa các lần cập nhật hạn mức.

<AsynchronousConfiguration>
   <SyncMessageCount>5</SyncMessageCount>
</AsynchronousConfiguration>

Ví dụ này chỉ định rằng số lượng hạn mức được cập nhật sau mỗi 5 yêu cầu trên mỗi trình xử lý thông báo Apigee Edge.

Mặc định: Không có
Sự hiện diện: Không bắt buộc
Loại:

Số nguyên

Phần tử <Identifier>

Sử dụng phần tử <Identifier> để định cấu hình chính sách nhằm tạo các bộ đếm riêng biệt dựa trên một biến luồng.

Bạn có thể tạo các bộ đếm riêng biệt cho những đặc điểm được xác định bằng một biến luồng. Ví dụ: bạn có thể sử dụng địa chỉ email của nhà phát triển để liên kết một hạn mức với một nhà phát triển cụ thể. Bạn có thể sử dụng nhiều biến để xác định hạn mức, cho dù bạn đang sử dụng biến tuỳ chỉnh hay biến được xác định trước, chẳng hạn như các biến có sẵn trong chính sách Xác minh khoá API. Xem thêm Tài liệu tham khảo về biến.

Nếu bạn không sử dụng phần tử này, chính sách sẽ sử dụng một bộ đếm duy nhất được áp dụng cho hạn mức.

Phần tử này cũng được thảo luận trong bài đăng sau đây trên Cộng đồng Apigee: Quota identifier across different policies (Giá trị nhận dạng hạn mức trên nhiều chính sách).

<Identifier ref="verifyapikey.verify-api-key.client_id"/>
Mặc định: Không áp dụng
Sự hiện diện: Không bắt buộc
Loại:

Chuỗi

Thuộc tính

Thuộc tính Mô tả Mặc định Sự hiện diện
ref

Chỉ định một biến luồng xác định bộ đếm cần dùng cho yêu cầu. Giá trị nhận dạng có thể là tiêu đề HTTP, tham số truy vấn, tham số biểu mẫu hoặc nội dung thông báo riêng biệt cho từng ứng dụng, người dùng ứng dụng, nhà phát triển ứng dụng, sản phẩm API hoặc đặc điểm khác.

<Identifier> thường được dùng nhất để xác định duy nhất các ứng dụng là client_id. client_id là một tên khác của khoá API (hoặc khoá người dùng) được tạo cho một ứng dụng khi ứng dụng đó được đăng ký trong một tổ chức trên Apigee Edge. Bạn có thể sử dụng giá trị nhận dạng này nếu đã bật chính sách uỷ quyền khoá API hoặc OAuth cho API của mình.

Trong một số trường hợp, bạn phải truy xuất chế độ cài đặt Hạn mức khi không có client_id, chẳng hạn như khi không có chính sách bảo mật. Trong những trường hợp đó, bạn có thể sử dụng chính sách Access Entity để truy xuất các chế độ cài đặt sản phẩm API thích hợp, sau đó trích xuất các giá trị bằng ExtractVariables, rồi sử dụng biến ngữ cảnh đã trích xuất trong chính sách Hạn mức. Để biết thêm thông tin, hãy xem Chính sách về thực thể truy cập.

Không áp dụng Không bắt buộc

Phần tử <MessageWeight>

Dùng để chỉ định trọng số được chỉ định cho mỗi thông báo. Sử dụng trọng số thông báo để tăng tác động của các thông báo yêu cầu. Ví dụ: các thông báo này tiêu thụ nhiều tài nguyên điện toán hơn những thông báo khác.

Ví dụ: bạn muốn tính các thông báo POST nặng gấp đôi hoặc tốn kém gấp đôi so với các thông báo GET. Do đó, bạn đặt MessageWeight thành 2 cho POST và 1 cho GET. Bạn thậm chí có thể đặt MessageWeight thành 0 để yêu cầu không ảnh hưởng đến bộ đếm. Trong ví dụ này, nếu hạn mức là 10 thông báo mỗi phút và MessageWeight cho yêu cầu POST là 2, thì hạn mức sẽ cho phép 5 yêu cầu POST trong khoảng thời gian 10 phút bất kỳ. Mọi yêu cầu bổ sung, POST hoặc GET, trước khi bộ đếm đặt lại đều bị từ chối.

Bạn phải chỉ định một giá trị đại diện cho MessageWeight bằng một biến luồng và có thể trích xuất giá trị đó từ tiêu đề HTTP, tham số truy vấn, tải trọng yêu cầu XML hoặc JSON hoặc bất kỳ biến luồng nào khác. Ví dụ: bạn đặt mã này trong một tiêu đề có tên là weight:

<MessageWeight ref="message_weight"/>
Mặc định: Không áp dụng
Sự hiện diện: Không bắt buộc
Loại:

Số nguyên

Biến luồng

Các biến Flow được xác định trước sau đây sẽ tự động được điền khi một chính sách Hạn mức thực thi. Để biết thêm thông tin về các biến trong luồng, hãy xem phần Tài liệu tham khảo về biến.

Biến Loại Quyền Mô tả
ratelimit.{policy_name}.allowed.count Dài Chỉ có thể đọc Trả về số lượng hạn mức được phép
ratelimit.{policy_name}.used.count Dài Chỉ có thể đọc Trả về hạn mức hiện tại đã sử dụng trong một khoảng hạn mức
ratelimit.{policy_name}.available.count Dài Chỉ có thể đọc Trả về số lượng hạn mức còn lại trong khoảng thời gian hạn mức
ratelimit.{policy_name}.exceed.count Dài Chỉ có thể đọc Trả về 1 sau khi vượt quá hạn mức.
ratelimit.{policy_name}.total.exceed.count Dài Chỉ có thể đọc Trả về 1 sau khi vượt quá hạn mức.
ratelimit.{policy_name}.expiry.time Dài Chỉ có thể đọc

Trả về thời gian UTC tính bằng mili giây, xác định thời điểm hạn ngạch hết hạn và khoảng thời gian hạn ngạch mới bắt đầu.

Khi loại chính sách Hạn mức là rollingwindow, giá trị này không hợp lệ vì khoảng thời gian hạn mức không bao giờ hết hạn.

ratelimit.{policy_name}.identifier Chuỗi Chỉ có thể đọc Trả về giá trị tham chiếu của giá trị nhận dạng (máy khách) được đính kèm vào chính sách
ratelimit.{policy_name}.class Chuỗi Chỉ có thể đọc Trả về lớp được liên kết với giá trị nhận dạng ứng dụng khách
ratelimit.{policy_name}.class.allowed.count Dài Chỉ có thể đọc Trả về số lượng hạn mức được phép xác định trong lớp
ratelimit.{policy_name}.class.used.count Dài Chỉ có thể đọc Trả về hạn mức đã sử dụng trong một lớp
ratelimit.{policy_name}.class.available.count Dài Chỉ có thể đọc Trả về số lượng hạn mức còn lại trong lớp
ratelimit.{policy_name}.class.exceed.count Dài Chỉ có thể đọc Trả về số lượng yêu cầu vượt quá hạn mức trong lớp trong khoảng thời gian hạn mức hiện tại
ratelimit.{policy_name}.class.total.exceed.count Dài Chỉ có thể đọc Trả về tổng số yêu cầu vượt quá hạn mức trong lớp trên tất cả các khoảng thời gian hạn mức, do đó, đây là tổng của class.exceed.count cho tất cả các khoảng thời gian hạn mức.
ratelimit.{policy_name}.failed Boolean Chỉ có thể đọc

Cho biết chính sách có bị vi phạm hay không (true hoặc false).

Tham chiếu lỗi

Phần này mô tả các mã lỗi và thông báo lỗi được trả về cũng như các biến lỗi do Edge đặt khi chính sách này kích hoạt lỗi. Thông tin này rất quan trọng nếu bạn đang phát triển các quy tắc lỗi để xử lý lỗi. Để tìm hiểu thêm, hãy xem bài viết Những điều bạn cần biết về lỗi chính sáchXử lý lỗi.

Lỗi thời gian chạy

Những lỗi này có thể xảy ra khi chính sách này thực thi.

Mã lỗi Trạng thái HTTP Nguyên nhân Khắc phục
policies.ratelimit.FailedToResolveQuotaIntervalReference 500 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>.
policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference 500 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 để xác định đơn vị thời gian áp dụng cho hạn mức. Khoảng thời gian có thể theo phút, giờ, ngày, tuần hoặc tháng.
policies.ratelimit.InvalidMessageWeight 500 Xảy ra nếu giá trị của phần tử <MessageWeight> được chỉ định thông qua một biến luồng không hợp lệ (giá trị không phải là số nguyên).
policies.ratelimit.QuotaViolation 500 Đã vượt quá hạn mức. Không áp dụng

Lỗi triển khai

Tên lỗi Nguyên nhân Khắc phục
InvalidQuotaInterval Nếu khoảng hạn mức được chỉ định trong phần tử <Interval> không phải một số nguyên thì việc triển khai proxy API sẽ không thành công. Ví dụ: nếu khoảng thời gian hạn mức được chỉ định là 0,1 trong phần tử <Interval>, thì việc triển khai phần tử Proxy API không thành công.
InvalidQuotaTimeUnit Nếu đơn vị thời gian đã chỉ định trong phần tử <TimeUnit> không được hỗ trợ, thì việc triển khai proxy API không thành công. Các đơn vị thời gian được hỗ trợ là minute, hour, day, weekmonth.
InvalidQuotaType Nếu loại hạn mức do thuộc tính type trong <Quota> chỉ định không hợp lệ, thì việc triển khai proxy API không thành công. Chiến lược phát hành đĩa đơn các loại hạn mức được hỗ trợ là default, calendar, flexirollingwindow.
InvalidStartTime Nếu định dạng của thời gian được chỉ định trong phần tử <StartTime> là không hợp lệ, thì việc triển khai proxy API không thành công. Định dạng hợp lệ là yyyy-MM-dd HH:mm:ss, đó là định dạng ngày và giờ ISO 8601. Cho Ví dụ: nếu thời gian được chỉ định trong phần tử <StartTime>7-16-2017 12:00:00 thì việc triển khai proxy API không thành công.
StartTimeNotSupported Nếu phần tử <StartTime> được chỉ định có loại hạn mức không phải là calendar, thì việc triển khai proxy API sẽ không thành công. Phần tử <StartTime> là chỉ được hỗ trợ cho loại hạn mức calendar. Ví dụ: nếu thuộc tính type được đặt vào flexi hoặc rolling window trong phần tử <Quota>, thì phương thức không triển khai được proxy API.
InvalidTimeUnitForDistributedQuota Nếu phần tử <Distributed> được đặt thành true và phần tử <TimeUnit> được đặt thành second thì không triển khai proxy API được. Đơn vị thời gian second không hợp lệ cho hạn mức được phân phối.
InvalidSynchronizeIntervalForAsyncConfiguration Nếu giá trị được chỉ định cho phần tử <SyncIntervalInSeconds> trong phần tử Phần tử <AsynchronousConfiguration> trong chính sách Hạn mức nhỏ hơn 0, thì không triển khai được proxy API.
InvalidAsynchronizeConfigurationForSynchronousQuota Nếu bạn đặt giá trị của phần tử <AsynchronousConfiguration> thành true trong chính sách Hạn mức, thì việc này cũng có cấu hình không đồng bộ được xác định bằng phần tử <AsynchronousConfiguration>, sau đó không triển khai proxy API được.

Biến lỗi

Các biến này được đặt khi chính sách này kích hoạt lỗi. Để biết thêm thông tin, hãy xem bài viết Những điều bạn cần biết về lỗi chính sách.

Biến Trong đó Ví dụ:
fault.name="fault_name" fault_name là tên của lỗi, như được liệt kê trong bảng Lỗi thời gian chạy ở trên. Tên lỗi là phần cuối cùng của mã lỗi. fault.name Matches "QuotaViolation"
ratelimit.policy_name.failed policy_name là tên do người dùng chỉ định của chính sách gây ra lỗi. ratelimit.QT-QuotaPolicy.failed = true

Ví dụ về phản hồi khi gặp lỗi

{  
   "fault":{  
      "detail":{  
         "errorcode":"policies.ratelimit.QuotaViolation"
      },
      "faultstring":"Rate limit quota violation. Quota limit  exceeded. Identifier : _default"
   }
}

Ví dụ về quy tắc lỗi

<FaultRules>
    <FaultRule name="Quota Errors">
        <Step>
            <Name>JavaScript-1</Name>
            <Condition>(fault.name Matches "QuotaViolation") </Condition>
        </Step>
        <Condition>ratelimit.Quota-1.failed=true</Condition>
    </FaultRule>
</FaultRules>

Giản đồ

Chủ đề có liên quan

Chính sách ResetQuota

Chính sách SpikeArrest

So sánh các chính sách về Hạn mức, Ngăn chặn đột biến và Giới hạn tốc độ đồng thời