【问题标题】:Architecture for Azure Functions App using an external REST API使用外部 REST API 的 Azure Functions App 体系结构
【发布时间】:2017-12-01 20:03:20
【问题描述】:

我想通过以下项目试用 Azure Functions:

  • 按时间(每 30 分钟)触发,我的初始函数 1 将一些数据放入队列 1。
  • 此队列 1 触发另一个函数 2,该函数调用外部 REST API、修改响应并将结果放入另一个队列 3。
  • 这个队列 3 启动另一个函数 3 来完成剩下的工作。

我的问题是 REST API 有速率限制。因此,如果我的 function1 将 100 个项目放入 queue1 并且 function2 被并行调用 100 次,我的 API 调用将被阻止。因此,我需要某种节流。

您将如何实现这一目标?我可以告诉 function2 等待特定时间,然后将项目添加回 queue1,但由于一切都是并行的,我可能会遇到死锁?

提前感谢您的想法!

【问题讨论】:

    标签: rest azure azure-functions


    【解决方案1】:

    我建议您查看 Azure Durable Functions here。 Durable Functions 框架允许您编排复杂的工作流程并管理状态。在您的示例中,您可以使用 Durable Functions 来解决速率限制问题

    【讨论】:

      【解决方案2】:

      被并行调用 100 次

      你可以通过配置host.json来限制这个(在一定程度上):

      • batchSize 用于存储队列

      • maxConcurrentCalls 用于服务总线

      如果这还不够,你可以做一些更复杂的事情:

      • 函数 1 知道它必须处理多少个项目,因此它可以计算未来 30 分钟内这些项目的“理想”分布

      • 在将消息添加到 queue1 时,它可以设置应该提取消息的时间(ScheduledEnqueueTimeUtc 用于服务总线或initialVisibilityDelay 用于CloudQueue

      • Function2 将被称为“按计划”,如果消息总量不是太高,这应该可以防止限制

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-09-03
        • 2020-04-30
        • 2019-10-14
        • 2021-11-14
        • 1970-01-01
        • 2023-03-18
        • 2011-11-10
        相关资源
        最近更新 更多