首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解决Azure数据工厂中的HttpStatusCode 429 "TOO_MANY_REQUESTS“?

如何解决Azure数据工厂中的HttpStatusCode 429 "TOO_MANY_REQUESTS“?
EN

Stack Overflow用户
提问于 2022-04-22 13:53:20
回答 1查看 413关注 0票数 0

我使用ADF的复制活动和REST 链接服务进行REST调用,并从API链接中获取json数据。单个API链接运行良好,但当我尝试在"TOO_MANY_REQUESTS". ForEach activity中使用多个API链接时,由于HttpStatusCode 429 (即HttpStatusCode 429),一些链接无法获得数据。

Q:如何通过添加延迟或类似的方法来解决这个问题,这样我的API调用就不会超过限制?

请参考这里的错误图像:https://i.stack.imgur.com/4DJDe.jpg

注意: API配额限制为每分钟10个请求。

我尝试过的解决方案:

  • 增加了重试和重试间隔(60秒)。在复制活动中,它第一次失败,但在第二次尝试中成功地提取数据。图像链接:https://i.stack.imgur.com/TVvD5.jpg

  • 并没有按照顺序执行ForEach活动,以避免同时发送所有请求,但似乎无法工作,因为我得到了相同的错误。

ForEach活动循环通过这个输入参数:

代码语言:javascript
复制
...
    {
        "sourceBaseURL":"http://api.xyz.io",
        "sourceRelativeURL":"abcde/abc",
        "sinkFileName":"test/file_name1.json",
        "requestBody": "{\"abc\": [1,2,3]}"
    },
    {
        "sourceBaseURL":"http://api.xyz.io",
        "sourceRelativeURL":"abcde/abc/cde",
        "sinkFileName":"test/file_name2.json",
        "requestBody": "{\"abc\": [1,2,3]}"
    },
...

但是我想知道有什么方法可以增加一些延迟作为标题来避免这个限制吗?

  • Ex.添加了Retry-After: 60作为头文件,但这不起作用。

图片参考:https://i.stack.imgur.com/yzKFf.jpg

我的配置在复制活动中的JSON:

代码语言:javascript
复制
"isSequential": true,
                    "activities": [
                        {
                            "name": "INGEST_API",
                            "type": "Copy",
                            "dependsOn": [],
                            "policy": {
                                "timeout": "7.00:00:00",
                                "retry": 0,
                                "retryIntervalInSeconds": 30,
                                "secureOutput": false,
                                "secureInput": false
                            },
                            "userProperties": [],
                            "typeProperties": {
                                "source": {
                                    "type": "RestSource",
                                    "httpRequestTimeout": "00:01:40",
                                    "requestInterval": "00.00:00:00.010",
                                    "requestMethod": "POST",
                                    "requestBody": {
                                        "value": "@item().requestBody",
                                        "type": "Expression"
                                    },
EN

回答 1

Stack Overflow用户

发布于 2022-04-22 18:22:58

因为你的限制是每分钟10雷克。您应该选择一个< 10的数字,比如每分钟8 req作为API的命中率。

因此,模式是从管道向API (非顺序)发送8个请求。此管道只能使用for循环发送8个请求。也有60秒的重试策略。

在for循环之后,添加一个等待活动60秒,然后完成。

这个管道是从另一个管道中调用的,它选择一个8次请求的批处理,并在一个循环中调用这个管道。执行管道策略是等到完成。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71969903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档