Azure functions Azure函数服务总线触发器触发的次数多于队列中的消息
我有两个服务总线队列和Azure服务总线队列触发器 该函数从队列中读取1000条消息,并将它们转发给另一条(用于测试) 当发布到Azure(计划消耗)时,我得到1030+个函数点击,尽管我的队列中只有1000条消息。我认为这与函数实例的数量有关 Q:如何对一个函数实例只处理一次唯一消息Azure functions Azure函数服务总线触发器触发的次数多于队列中的消息,azure-functions,azureservicebus,azure-servicebus-queues,azure-function-app,azure-servicebus-topics,Azure Functions,Azureservicebus,Azure Servicebus Queues,Azure Function App,Azure Servicebus Topics,我有两个服务总线队列和Azure服务总线队列触发器 该函数从队列中读取1000条消息,并将它们转发给另一条(用于测试) 当发布到Azure(计划消耗)时,我得到1030+个函数点击,尽管我的队列中只有1000条消息。我认为这与函数实例的数量有关 Q:如何对一个函数实例只处理一次唯一消息 [FunctionName("Function1")] public static async Task Run([ServiceBusTrigger("export
[FunctionName("Function1")]
public static async Task Run([ServiceBusTrigger("export-queue",
Connection = "Connection")]
string myQueueItem, ILogger log)
{
log.LogInformation($"Message: {myQueueItem}:{DateTime.Now}");
Thread.Sleep(2000);
queueClient = new QueueClient(ServiceBusConnectionString, QueueName);
var message = new Message(Encoding.UTF8.GetBytes(myQueueItem));
await queueClient.SendAsync(message);
await queueClient.CloseAsync();
}
默认情况下,
ServiceBusTrigger
正在使用。这在技术上意味着,如果消息锁已被锁定,则可以多次处理消息。这就解释了为什么对于1000条传入消息,您会得到超过1000次调用
另一个角度是函数执行的持续时间以及预取大小。如果执行所需的时间足够长,以致于丢失对某些预取消息的锁定,请减少
也可以考虑以至少一次处理消息的方式设计解决方案,而不是一次处理。
< P> <强>对我有用。< /强> 为您的host.json添加扩展:"extensions": {
"serviceBus": {
"prefetchCount": 1,
"messageHandlerOptions": {
"autoComplete": true,
"maxConcurrentCalls": 1,
"maxAutoRenewDuration": "00:05:00"
},
"sessionHandlerOptions": {
"autoComplete": true,
"messageWaitTimeout": "00:00:30",
"maxAutoRenewDuration": "00:55:00",
"maxConcurrentSessions": 10
}
}
}