首页 文章

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

提问于
浏览
1

我有一个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,它说 batchSize 是否可以小于 newBatchThreshold . 我只知道_23666691的建议是 batchSize 的一半(这显然不是我在做的) .

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

1 回答

  • 5

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

    请注意,在使用“消耗Azure功能”时,最终可能会缩放到多个实例,每个实例都具有这些限制 . 如果你想避免尝试将 WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT 设置为1,则按https://github.com/Azure/azure-webjobs-sdk-script/wiki/Configuration-Settings

相关问题