我有一个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
是否可以小于newBatchThreshold
。我只知道建议batchSize
为display
的一半(这显然不是我正在做的事情)。
我的问题是:这个配置好吗?或者有更好的方法来实现我的限制目标吗?
答案 0 :(得分:6)
是的,这完全没问题。每个标志都有一个精确的(虽然有点令人困惑)语义,任何组合都是有效的,并且会尊重所记录的语义。
请注意,在使用消费Azure功能时,最终可能会缩放到多个实例,每个实例都有这些限制。如果您想避免这种情况,请尝试根据https://github.com/Azure/azure-webjobs-sdk-script/wiki/Configuration-Settings
将WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT
设置为1