我的功能是将负载发送到不同的 sftp 服务器。这些服务器在它们可以接受的连接数量上受到限制。
我需要一个解决方案来限制我们与这些服务器的连接。
该功能由存储队列触发,设计初稿为:
然后我了解到每个函数只能有 1 个触发器,这让我想到了另一个聚合队列:
我可以设置 batchSize/newBatchThreshold在原始队列上,但我不确定这是否有效,因为原始队列不知道何时将消息推送到聚合队列。
- 我需要的功能是不为来自队列 X 的所有消息扩展到超过 N 个实例,因为 sftp 服务器 X 不会接受超过 N 个连接。
- 此外,我需要函数将来自队列 Y 的所有消息扩展到不超过 M 个实例,因为 sftp 服务器 Y 不会接受超过 M 个连接。
上述场景的实例总数为 M + N。
我们如何调整设计以满足这些要求?
最佳答案
对此没有 100% 万无一失的解决方案,已跟踪问题 here .
最好的方法是在聚合队列触发的 Function App 的应用程序设置中将 WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT
设置为 1
。然后,您应该只获得一个 Function App 的并发实例,因此 batchSize
设置实际上对速率限制很有用。
在这种情况下您不需要限制队列处理器 X/Y/Z,让消息流向聚合。
现在,我不明白是只有来自队列 X 的消息接触 SFPT X,还是多对多的。如果是一对一,摆脱聚合队列、拥有三个 Function 并分别限制每个队列的并发性是有意义的。
无论如何,限制设置如我上面所建议的。
如果仍然不能满足您的要求,您可以切换到其他消息服务。例如,将一种类型的所有消息发送到 Service Bus 的单独 session 或 Event Hub 的单个分区,这自然会限制代理级别的并发。
关于c# - 确保为特定队列扩展不超过 N 个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56955514/