分享方式:


快速入門:設定要求速率限制

注意

基本標準和企業方案將從 2025 年 3 月中旬開始淘汰,並停用 3 年。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 Azure Spring Apps 淘汰公告

標準 耗用量和專用 方案將從 2024 年 9 月 30 日起淘汰,並在六個月後完成關閉。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 將 Azure Spring Apps 標準取用和專用方案遷移至 Azure Container Apps

本文適用於:❌基本/標準 ✔️ Enterprise

本快速入門說明如何在 Azure Spring Apps 企業版方案中使用 Spring Cloud Gateway 來設定要求速率限制。

速率限制可讓您避免發生流量尖峰的問題。 當您設定要求速率限制時,您的應用程式可能會拒絕過多的要求。 此設定可協助您將節流錯誤降到最低,並更準確地預測輸送量。

必要條件

設定要求速率限制

Spring Cloud 網關包含來自開放原始碼版本的路由篩選,以及數個其他路由篩選器。 其中一個篩選條件是 RateLimit:限制使用者要求篩選條件。 RateLimit 篩選條件會限制時間範圍內每個路由所允許的要求數目。

定義路由時,您可以在路由的篩選清單中加入RateLimit篩選。 篩選條件接受四個選項:

  • 窗口期間接受的要求數目。
  • 視窗的持續時間。 此值預設為毫秒,但您可以指定 smh後綴,以指出此值以秒、分鐘或小時為單位。
  • (選擇性)使用者分割索引鍵。 您也可以套用每個使用者的速率限制。 也就是說,不同的使用者可以根據要求中找到的標識符,有自己的輸送量。 指出金鑰是否位於 JWT 宣告或 HTTP 標頭中,以及或 claim header 語法。
  • (選擇性)您可以依IP位址來速率限制,但不能與每個使用者的速率限制結合。

下列範例會將所有使用者限制為每五秒對 /products 路由的兩個要求:

{
    "predicates": [
      "Path=/products",
      "Method=GET"
    ],
    "filters": [
      "StripPrefix=0",
      "RateLimit=2,5s"
    ]
}

如果您想要公開不同使用者集合的路由,則每個使用者都由自己的 client_id HTTP 標頭識別,請使用下列路由定義:

{
    "predicates": [
      "Path=/products",
      "Method=GET"
    ],
    "filters": [
      "StripPrefix=0",
      "RateLimit=2,5s,{header:client_id}"
    ]
}

超過限制時,回應將會失敗並出現 429 Too Many Requests 狀態。

使用下列命令將篩選套用 RateLimit/products 路由:

az spring gateway route-config update \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-service-instance-name> \
    --name catalog-routes \
    --app-name catalog-service \
    --routes-file azure-spring-apps-enterprise/resources/json/routes/catalog-service_rate-limit.json

使用下列命令來擷取 Spring Cloud Gateway 中路由的 /products URL:

export GATEWAY_URL=$(az spring gateway show \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-service-instance-name> | jq -r '.properties.url')

echo "https://${GATEWAY_URL}/products"

在五秒內對 URL /products 提出數個要求,以查看要求失敗且狀態 429 Too Many Requests為 。

清除資源

如果您打算繼續進行後續的快速入門和教學課程,您可以讓這些資源留在原處。 如果不再需要,請刪除資源群組,這會刪除資源群組中的資源。 若要使用 Azure CLI 刪除資源群組,請使用下列命令:

echo "Enter the Resource Group name:" &&
read resourceGroupName &&
az group delete --name $resourceGroupName &&
echo "Press [ENTER] to continue ..."

下一步

繼續進行下列任一選擇性快速入門: