快速入門:設定要求速率限制
注意
基本、標準和企業方案將從 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 來設定要求速率限制。
速率限制可讓您避免發生流量尖峰的問題。 當您設定要求速率限制時,您的應用程式可能會拒絕過多的要求。 此設定可協助您將節流錯誤降到最低,並更準確地預測輸送量。
必要條件
- 具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶。
- 了解並滿足 Azure Marketplace 中企業方案的需求一節。
- Azure CLI 2.45.0 版或更高版本。
- Git。
- jq
- Azure Spring 應用程式企業方案延伸模組。 使用下列命令來移除舊版並安裝最新的企業方案延伸模組。 如果您先前已安裝
spring-cloud
延伸模組,請將其解除安裝,以避免設定與版本不符。az extension add --upgrade --name spring az extension remove --name spring-cloud
- 使用企業方案,完成建置和部署應用程式至 Azure Spring Apps 中的步驟。
設定要求速率限制
Spring Cloud 網關包含來自開放原始碼版本的路由篩選,以及數個其他路由篩選器。 其中一個篩選條件是 RateLimit:限制使用者要求篩選條件。 RateLimit 篩選條件會限制時間範圍內每個路由所允許的要求數目。
定義路由時,您可以在路由的篩選清單中加入RateLimit篩選。 篩選條件接受四個選項:
- 窗口期間接受的要求數目。
- 視窗的持續時間。 此值預設為毫秒,但您可以指定 s、m 或 h 的後綴,以指出此值以秒、分鐘或小時為單位。
- (選擇性)使用者分割索引鍵。 您也可以套用每個使用者的速率限制。 也就是說,不同的使用者可以根據要求中找到的標識符,有自己的輸送量。 指出金鑰是否位於 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 ..."
下一步
繼續進行下列任一選擇性快速入門: