禁用 Azure Functions 多个同时触发器

Disabling Azure Function multiple simultaneous triggers

我有一个 Azure Function App,其中包含 7 个函数,用 Node.js 编写,通过 Bitbucket CI 和项目根目录中的以下 host.json 文件部署:

{
    "id": "...",
    "queues": {
        // retrieve only 1 queue message at a time
        "batchSize": 1,
        "maxDequeueCount": 1,
        "newBatchThreshold": 0
    }
}

据我所知,这应该确保一次只触发 1 个队列触发函数。

但是,如果我在我的函数中加入以下语句:

context.log(`Started processing at ${new Date()}`);

我仍然有一些案例的 2 个队列消息的开始时间完全相同。

知道我错过了什么吗? 这是每个函数还是每个队列使用的 batchSize 属性?

如果您查看 host.json documentation,您可以看到 batchSize 是每个(作业)函数。

这是 Azure Functions 在 queue listener.

中提取批处理的位置

每个 QueueTrigger 绑定都创建了一个单独的队列侦听器,因此 batchSize 是 per-function。在这种情况下,由于您有 7 个函数从同一个队列触发,因此您可以在单独的函数执行中在此实例上同时处理多达 7 个队列消息。

我通过编写一个 webjobs 控制台应用程序进行了验证,该应用程序具有从同一队列触发的两个函数。我可以看到有两个单独的 QueueListener 对象(通过 GetHashCode),每个函数一个,同时侦听同一个队列。

为什么要禁用同时执行?