你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
快速入门:设置请求速率限制
注意
从 2025 年 3 月中旬开始,基本、标准和企业计划将弃用,停用期为三年。 建议过渡到 Azure 容器应用。 有关详细信息,请参阅 Azure Spring Apps 停用公告。
从 2024 年 9 月 30 日开始,标准消耗和专用计划将弃用,六个月后将完全关闭。 建议过渡到 Azure 容器应用。 有关详细信息,请参阅将 Azure Spring Apps 标准消耗和专用计划迁移到 Azure 容器应用。
本文适用于:❌ 基本版/标准版 ✔️ 企业版
此快速入门介绍如何在 Azure Spring Apps Enterprise 计划上使用 Spring Cloud Gateway 设置请求速率限制。
通过速率限制,可以避免出现流量峰值时出现的问题。 设置请求速率限制时,应用程序可能会拒绝过多的请求。 此配置可帮助你最大程度地减少限制错误并更准确地预测吞吐量。
先决条件
- 具有活动订阅的 Azure 帐户。 免费创建帐户。
- 了解并满足 Azure 市场中企业计划的要求部分。
- Azure CLI 版本 2.45.0 或更高版本。
- Git。
- jq
- Azure Spring Apps 企业计划扩展。 使用以下命令删除以前的版本,并安装最新的企业计划扩展。 如果以前安装了
spring-cloud
扩展,请卸载它以避免配置和版本不匹配。az extension add --upgrade --name spring az extension remove --name spring-cloud
- 完成使用企业计划生成应用并将其部署到 Azure Spring Apps 中的步骤。
设置请求速率限制
Spring Cloud Gateway 包括来自开源版本的路由筛选器和多个更多路由筛选器。 其中一个筛选器是 RateLimit:限制用户请求筛选器。 RateLimit 筛选器限制时间范围内每个路由允许的请求数。
定义路由时,可以通过将 RateLimit 筛选器包含在路由的筛选器列表中来添加它。 筛选器接受四个选项:
- 在窗口中接受的请求数。
- 窗口的持续时间。 此值默认为毫秒,但可以指定其后缀为 s、 m 或 h,以表示该值以秒、分钟或小时为单位。
- (可选)用户分区键。 还可以应用每个用户的速率限制。 也就是说,不同的用户可以根据请求中找到的标识符拥有自己的吞吐量。 指示密钥是否位于 JWT 声明或带有语法
claim
或header
的 HTTP 标头中。 - (可选)可以按 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"
在五秒内向 /products
的 URL 发出多个请求,以查看失败并出现状态 429 Too Many Requests
的请求。
清理资源
如果打算继续使用后续的快速入门和教程,则可能需要保留这些资源。 如果不再需要资源组,可以将其删除,这将删除资源组中的资源。 若要使用 Azure CLI 删除资源组,请使用以下命令:
echo "Enter the Resource Group name:" &&
read resourceGroupName &&
az group delete --name $resourceGroupName &&
echo "Press [ENTER] to continue ..."
后续步骤
继续学习以下任一可选快速入门: