Azure functions 我在哪里指定Azure服务总线中的MaxConcurrent调用
下面是我的Azure函数应用程序代码,它在服务总线主题上触发。经过一定的延迟后,我在控制台中遇到了这个错误“提供的锁无效。锁已过期,或者消息已从队列中删除。在删除消息时” 在谷歌搜索和引用其他堆栈溢出帖子时,要求尝试的一个解决方案是指定Maxconcurrent调用,但我无法在下面的代码中确定在哪里指定以及如何指定。如果有人能在这方面帮助我,如果还有其他选择,我应该尝试这个错误Azure functions 我在哪里指定Azure服务总线中的MaxConcurrent调用,azure-functions,azureservicebus,azure-servicebus-topics,Azure Functions,Azureservicebus,Azure Servicebus Topics,下面是我的Azure函数应用程序代码,它在服务总线主题上触发。经过一定的延迟后,我在控制台中遇到了这个错误“提供的锁无效。锁已过期,或者消息已从队列中删除。在删除消息时” 在谷歌搜索和引用其他堆栈溢出帖子时,要求尝试的一个解决方案是指定Maxconcurrent调用,但我无法在下面的代码中确定在哪里指定以及如何指定。如果有人能在这方面帮助我,如果还有其他选择,我应该尝试这个错误 public class TabularData { [FunctionName( "
public class TabularData
{
[FunctionName( "ProcessTableData" )]
public async Task Run( [ServiceBusTrigger("twister-events", "tabulardata-processor",
Connection = "AzureServiceBusString")]
string SbMsg, ExecutionContext context,
ILogger log )
{
try
{
MyProject.CreateDefaultLoggerFactory();
TableStorageManager manager = new TableStorageManager();
if( !string.IsNullOrEmpty( SbMsg ) )
{
log.LogInformation( $"C# ServiceBus topic trigger function processed message: {SbMsg}" );
TableStorageConfiguration rulesList = GetConfiguration( context.FunctionAppDirectory, "DataFileConfiguration.json" );
await ProcessServiceBusMessage( SbMsg, rulesList, manager );
}
}
catch( Exception Ex )
{
log.LogError( $"Error while uploading tabular data; {Ex.Message}" );
throw;
}
}
更新:这是我的host.json文件的外观,但我仍然遇到相同的错误
{
"functionTimeout": "05:05:00",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
}
}
},
"version": "2.0",
"extensions": {
"serviceBus": {
"prefetchCount": 100,
"messageHandlerOptions": {
"autoComplete": false,
"maxConcurrentCalls": 32,
"maxAutoRenewDuration": "05:00:00"
},
"sessionHandlerOptions": {
"autoComplete": false,
"messageWaitTimeout": "05:00:30",
"maxAutoRenewDuration": "05:55:00",
"maxConcurrentSessions": 16
}
}
}
该错误基本上意味着函数应用程序无法在锁定持续时间(默认情况下为30秒)内处理消息,另一种解决方案是将锁定持续时间从30增加到60,看看这是否有助于减少锁定无效异常的数量。 关于在host.json设置文件中指定“maxConcurrentCalls”的位置
},
"version": "2.0",
"extensions": {
"serviceBus": {
"maxConcurrentCalls": "1"
}
}
}
我能提供的并发调用的最大值是多少??以及增加锁定持续时间的替代解决方案。我在哪里做?你能查一下我的问题吗。我已经更新了我的host.json文件,但仍然收到相同的错误。如果您可以通过在服务总线中重新创建队列/主题来增加锁定持续时间,您将在创建过程中看到该选项。此外,您是否经常或偶尔收到此错误?我想知道是否您在host.json中将autocomplete设置为false,并且没有为代码中某个地方处理的消息调用complete,以防您收到所有消息的错误,然后尝试将autocomplete设置为“true”我应该从host.json文件中删除sessionHandlerOptions吗?将autocomplete设置为true是针对messageHandlerOptions的吗?另外,考虑到我有大约500条消息一条接一条地出现,函数会一条接一条地获取该消息,然后进行一些过滤和查询,并将其传递给Azur表格存储,我可以为锁定持续时间保留的最大持续时间是多少。每封邮件大约需要20/30秒,您可以尝试将其更新到60秒,考虑到maxautorenewduration为5分钟,总共大约需要6分钟。如果只有一些消息没有得到处理,那么您不必担心自动完成,我猜您是在手动调用complete(),您可能还想看看这篇文章,因为预回迁计数设置为100可能是一个问题