我有一个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 回答
是的,这完全没问题 . 每个标志都有一个精确的(虽然有点令人困惑)语义,任何组合都是有效的,并且会尊重所记录的语义 .
请注意,在使用“消耗Azure功能”时,最终可能会缩放到多个实例,每个实例都具有这些限制 . 如果你想避免尝试将
WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT
设置为1,则按https://github.com/Azure/azure-webjobs-sdk-script/wiki/Configuration-Settings