c# - 确保为特定队列扩展不超过 N 个实例

标签 c# queue azure-functions azure-storage azure-queues

我的功能是将负载发送到不同的 sftp 服务器。这些服务器在它们可以接受的连接数量上受到限制。

我需要一个解决方案来限制我们与这些服务器的连接。

该功能由存储队列触发,设计初稿为:

enter image description here

然后我了解到每个函数只能有 1 个触发器,这让我想到了另一个聚合队列:

enter image description here

我可以设置 batchSize/newBatchThreshold在原始队列上,但我不确定这是否有效,因为原始队列不知道何时将消息推送到聚合队列

  1. 我需要的功能是不为来自队列 X 的所有消息扩展到超过 N 个实例,因为 sftp 服务器 X 不会接受超过 N 个连接。
  2. 此外,我需要函数将来自队列 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/

相关文章:

c# - 在函数的字符串类型参数上使用 C# DataView.RowFilter 属性

c# - 在azure函数中查找自定义.config文件?

C# 使用HttpContext.Current.Request 在手机浏览器上请求时无法获取QueryString e

c++ - 查找项目是否已存在于 STL 队列中

python - 类型错误 : cannot pickle '_thread.lock' object with RQ

python - 是否可以使用 pyTorch 创建一个 FIFO 队列?

azure - 将 Azure VM 私下连接到 azure 函数

azure-functions - 有没有办法告诉 azure 函数的最后发布日期?

c# - 从 BackgroundWorker 调用的方法中返回

c# - Azure Functions无法将队列绑定(bind)到CloudQueue类型