使用外部REST API的Azure Functions App架构

时间:2017-12-01 11:39:05

标签: rest azure azure-functions

我想尝试使用以下项目的Azure Functions:

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

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

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

提前感谢您的想法!

2 个答案:

答案 0 :(得分:2)

  

被称为100次并行

您可以通过配置host.json

来限制此(在某种程度上)
    存储队列的
  • batchSize

  • maxConcurrentCalls用于服务总线

如果这还不够,你可以做一些更加软化的事情:

  • 功能1知道它必须处理多少项,因此它可以计算出理想的"在接下来的30分钟内分发那些

  • 将消息添加到queue1时,可以设置应该接收消息的时间(服务总线为ScheduledEnqueueTimeUtcinitialVisibilityDelayCloudQueue

  • 将按照计划"调用功能2"如果消息总量不是太高,这应该可以防止限制

答案 1 :(得分:1)

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