【发布时间】:2022-01-16 16:33:28
【问题描述】:
我想要一个从 Azure 存储帐户队列触发的 azure 函数作为单例运行。
函数应用在进程中,net6:
<TargetFramework>net6.0</TargetFramework>
<AzureFunctionsVersion>v4</AzureFunctionsVersion>
我的函数目前看起来如下:
[FunctionName(nameof(QueueTrigger))]
[Singleton(Mode = SingletonMode.Listener)]
public async Task QueueBatch([QueueTrigger("TriggerSurvey")] TriggerMsg triggerMsg)
按照@Moho 的建议,我在host.json 和Singleton 方法装饰器中添加了以下内容,如上所示,但这对应用程序的行为没有影响。
"extensions": {
"queues": {
"maxPollingInterval": "00:00:02",
"visibilityTimeout": "00:00:30",
"batchSize": 1,
"maxDequeueCount": 5,
"newBatchThreshold": 8,
"messageEncoding": "base64"
}
}
我测试如下: 我向队列发布了一条消息。该函数消耗了它并开始了它的工作 - 写入 Azure Sql。这项工作花费了大约 3 分钟,它在工作时多次插入了一个日志表,以及函数实例的相关 ID。发布第一条消息几秒钟后,我发布了第二条消息。从日志表中,我可以看到一个不同的函数实例已经消耗并与第一个函数实例同时处理。
有谁知道如何配置以便只有一个函数实例会轮询队列?
【问题讨论】:
-
您能否检查您的函数在处理第一条消息期间是否有任何错误?
-
没有错误,成功完成
-
我认为这是基于您的代码的特定场景,作业完成后表中有多少相关ID?
标签: c# azure-functions