Azure函数host.json队列batchSize小于newBatchThreshold

时间:2017-09-27 16:16:40

标签: azure azure-functions azure-webjobssdk azure-queues

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

为了完成所需的限制,我将Azure功能计划设置为在App Service计划而不是消费计划上运行,并且我在host.json中为Azure功能服务设置了以下值:

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

理论上,这使得只要7个或更少的函数实例正在运行,那么另外1个消息将被出列,直到有8个消息被处理。我现在正在运行它似乎正在运行,但我无法在host.json文档或WebJobs SDK documentation中的任何位置找到batchSizenewBatchThreshold是否可以小于newBatchThreshold。我只知道建议batchSizedisplay的一半(这显然不是我正在做的事情)。

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

1 个答案:

答案 0 :(得分:6)

是的,这完全没问题。每个标志都有一个精确的(虽然有点令人困惑)语义,任何组合都是有效的,并且会尊重所记录的语义。

请注意,在使用消费Azure功能时,最终可能会缩放到多个实例,每个实例都有这些限制。如果您想避免这种情况,请尝试根据https://github.com/Azure/azure-webjobs-sdk-script/wiki/Configuration-Settings

WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT设置为1