我想通过以下项目尝试Azure功能:
- 由时间(每30分钟一次)触发,我的初始功能1将一些数据放在队列中。
- 此队列触发另一个调用外部REST API的函数2,修改响应并将结果放入另一个队列中。
- 此Queue3启动另一个函数3做其余的。
我的问题是REST API具有限制速率。因此,如果我的函数1将100个项目放在队列中,并且该函数2称为100次并行,则我的API调用将被阻止。因此,我需要某种节流。
您将如何实现?我可以告诉函数2等待特定时间,然后将项目添加回队列1,但是由于一切都是平行的,所以我可能会遇到僵局?
事先感谢您的想法!
我建议您在此处查看Azure耐用功能。耐用的功能框架使您可以协调复杂的工作流并管理状态。在您的示例中,您可以使用持久功能来解决限制速率问题
称为100倍并行
您可以通过配置host.json
:
batchSize
用于存储队列maxConcurrentCalls
用于服务总线
如果还不够
函数1知道它必须处理多少个项目,因此可以计算接下来30分钟的"理想"分布
将消息添加到队列时,它可以设置应拾取消息的时间(服务总线的
ScheduledEnqueueTimeUtc
或initialVisibilityDelay
的CC_5)函数2将被称为"按计划",如果消息总数不太高