Azure Functions host.json 队列 batchSize 小于 newBatchThreshold

Azure Functions host.json Queue batchSize less than newBatchThreshold

我有一个调用 VM 上托管的 Web 服务的 Azure 函数。由于这种依赖性,重要的是 Azure Functions 的实例不超过 8 个并发 运行ning(VM 只有 8 个内核,每次调用 Web 服务都使用一个内核)。如果生成超过 8 个实例,则 Web 服务调用将开始备份,触发 Azure 函数的队列中的项目将开始超时,消息将被丢弃。但是,我也想尽可能地利用可用资源来最大化队列的处理,所以我希望只要队列中有 8 个或更多项目,总是有 8 个 Azure 函数实例 运行ning队列。

为了完成所需的限制,我在应用服务计划而不是消费计划中将 Azure Function 计划设置为 运行,并且我在 host.json 中设置了以下值Azure 函数服务:

{
    "queues": {
        "batchSize": 1,
        "newBatchThreshold": 7
    }
}

从理论上讲,只要有 7 个或更少的函数实例 运行ning,那么就会有 1 条消息出队,直到有 8 条消息被处理。我现在有这个 运行ning,它似乎在工作,但我在 host.json documentation or the WebJobs SDK documentation 中找不到任何地方说明 batchSize 是否可以小于newBatchThreshold。我只知道建议 newBatchThresholdbatchSize 的一半(这显然不是我在做的)。

我的问题是:这个配置可以吗?或者有更好的方法来实现我的节流目标吗?

是的,完全没问题。每个标志都有一个精确的(尽管有点令人困惑)语义,任何组合都是有效的并且将遵守记录的语义。

请注意,使用消费 Azure 函数时,您最终可能会扩展到多个实例,每个实例都有这些限制。如果你想避免这种情况,请尝试将 WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT 设置为 1,根据 https://github.com/Azure/azure-webjobs-sdk-script/wiki/Configuration-Settings