禁用 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
),每个函数一个,同时侦听同一个队列。
为什么要禁用同时执行?
我有一个 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
),每个函数一个,同时侦听同一个队列。
为什么要禁用同时执行?