我正在将Azure Logic App与Azure BLOB存储触发器配合使用。
在Azure存储中更新或修改Blob时,我会从存储中提取创建或修改的Blob的内容,对数据进行一些转换,然后使用“创建内容-Azure Blob存储”操作将其作为新的Blob内容推送回Azure Storage。 LogicApp。
在将大量Blob插入(例如10000个文件)或更新到Blob存储中之后,Logic App会按预期为这些插入的Blob触发多次运行,但是进一步的Azure Blob操作因以下错误而失败:
{
"statusCode": 429,
"message": "Rate limit is exceeded. Try again in 16 seconds."
}
有人在Logic App中遇到类似问题吗?如果是,您能否建议可能的原因和可能的解决方法。
谢谢
答案 0 :(得分:1)
好像您在Azure Blob托管API上点击了rate limits。
答案 1 :(得分:0)
请检查此文档:https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-request-limits
对于每个Azure订阅和租户,资源管理器最多允许 每小时12,000个读取请求和每小时1200个写入请求。
您可以通过以下方式查看使用情况:
getReviewListPaginator
或
response.Headers.GetValues("x-ms-ratelimit-remaining-subscription-reads").GetValue(0)
答案 2 :(得分:0)
请参考 Jörgen Bergström 的博客:http://techstuff.bergstrom.nu/429-rate-limit-exceeded-in-logic-apps/
从本质上讲,他说您可以设置多个执行相同操作的 API 连接,然后在逻辑应用代码视图中随机化连接以随机使用这些连接之一,这将消除速率超过问题。
一个例子(我使用的是 SQL 连接器)见下面我为逻辑应用设置的 API 连接。您可以对 blob 存储连接执行相同操作并使用类似的命名约定,例如blob_1, blob_2, blob_3, ... 等等。你可以创建任意多个,我为我创建了 10 个:
然后,您将在逻辑应用代码视图中替换所有当前的 blob 连接,例如
@parameters('$connections')['blob']['connectionId']
其中“blob”是您当前与以下内容的 blob api 连接:
@parameters('$connections')[concat('blob_',rand(1,10))]['connectionId']
然后确保在代码末尾添加所有“blob_”连接:
"blob_1": {
"connectionId": "/subscriptions/.../resourceGroups/.../providers/Microsoft.Web/connections/blob-1",
"connectionName": "blob-1",
"id": "/subscriptions/.../providers/Microsoft.Web/locations/.../managedApis/blob"
},
"blob_2": {
"connectionId": "/subscriptions/.../resourceGroups/.../providers/Microsoft.Web/connections/blob-2",
"connectionName": "blob-2",
"id": "/subscriptions/.../providers/Microsoft.Web/locations/.../managedApis/blob"
},
...
然后,逻辑应用会随机选择在运行期间使用哪个连接,从而消除 429 速率限制错误。