【问题标题】: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来限制这个(在一定程度上):
如果这还不够,你可以做一些更复杂的事情:
函数 1 知道它必须处理多少个项目,因此它可以计算未来 30 分钟内这些项目的“理想”分布
在将消息添加到 queue1 时,它可以设置应该提取消息的时间(ScheduledEnqueueTimeUtc 用于服务总线或initialVisibilityDelay 用于CloudQueue)
Function2 将被称为“按计划”,如果消息总量不是太高,这应该可以防止限制