我在哪里指定 Azure 服务总线中的 MaxConcurrent 调用
Where do I specify MaxConcurrent calls in Azure Service bus
下面是我的 Azure Function App 代码,它在服务总线主题上触发。经过一定的延迟后,我 运行 在我的控制台中遇到此错误“提供的锁无效。锁已过期,或者消息已从队列中删除。删除消息时".
在谷歌搜索和引用其他堆栈溢出帖子时,一个被要求尝试的解决方案是指定 Maxconcurrent 调用,但我不知道我在哪里指定它以及如何在下面的代码中指定它。如果有人可以帮助我解决这个问题,如果还有其他选择,我应该尝试解决这个错误。
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
}
}
}
该错误基本上意味着 Function App 无法在默认为 30 秒的锁定持续时间内处理消息,另一种解决方案是将锁定持续时间从 30 增加到 60,看看是否有帮助减少锁无效异常的数量。
关于在 host.json 设置文件
中指定“maxConcurrentCalls”的位置
},
"version": "2.0",
"extensions": {
"serviceBus": {
"maxConcurrentCalls": "1"
}
}
}
下面是我的 Azure Function App 代码,它在服务总线主题上触发。经过一定的延迟后,我 运行 在我的控制台中遇到此错误“提供的锁无效。锁已过期,或者消息已从队列中删除。删除消息时".
在谷歌搜索和引用其他堆栈溢出帖子时,一个被要求尝试的解决方案是指定 Maxconcurrent 调用,但我不知道我在哪里指定它以及如何在下面的代码中指定它。如果有人可以帮助我解决这个问题,如果还有其他选择,我应该尝试解决这个错误。
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
}
}
}
该错误基本上意味着 Function App 无法在默认为 30 秒的锁定持续时间内处理消息,另一种解决方案是将锁定持续时间从 30 增加到 60,看看是否有帮助减少锁无效异常的数量。 关于在 host.json 设置文件
中指定“maxConcurrentCalls”的位置 },
"version": "2.0",
"extensions": {
"serviceBus": {
"maxConcurrentCalls": "1"
}
}
}