部署ServiceBus触发的Azure Function遇异常:LockToken未找到
问题:Azure ServiceBus触发函数部署后报错LockToken不存在
本地运行Visual Studio生成的基础ServiceBus触发Azure Function正常,部署到Azure后无响应,手动执行时出现以下错误:
2024-11-15T21:35:52Z [Information] Received HTTP response headers after 102.8069ms - 200 2024-11-15T21:35:52Z [Information] End processing HTTP request after 111.4159ms - 200 2024-11-15T21:35:52Z [Information] Call failed with gRPC error status. Status code: 'FailedPrecondition', Message: 'LockToken 00000000-0000-0000-0000-000000000000 not found.'. 2024-11-15T21:35:52Z [Error] Function 'FunctionSB', Invocation id 'c8144425-6892-40fc-a415-7f235d053743': An exception was thrown by the invocation.
已在环境变量中配置ServiceBus连接字符串,代码为默认生成的基础版本:
[Function(nameof(FunctionSB))] public async Task Run( [ServiceBusTrigger("visionsystemmessages")] ServiceBusReceivedMessage message, ServiceBusMessageActions messageActions) { string content = message.Body.ToString(); // Complete the message await messageActions.CompleteMessageAsync(message); Console.WriteLine("Success start"); }
可能的原因及解决步骤
重复完成消息导致锁令牌失效
ServiceBusTrigger默认AutoComplete = true,函数执行完毕后会自动完成消息。此时代码中手动调用CompleteMessageAsync会触发二次完成,锁令牌已失效,从而报错。
解决:修改触发器特性,关闭自动完成:[ServiceBusTrigger("visionsystemmessages", AutoComplete = false)]连接字符串权限不足
确保ServiceBus连接字符串对应的SAS策略拥有Listen和Manage权限,完成消息操作需要Manage权限。手动触发的模拟消息无有效锁令牌
Azure平台手动触发ServiceBus函数时生成的是模拟消息,无有效锁令牌,手动调用完成操作必然报错。测试时建议使用真实消息(比如通过ServiceBus Explorer发送消息到目标队列),或临时注释CompleteMessageAsync调用。
内容的提问来源于stack exchange,提问作者qwertyuiop lkjhgfdsa
相关产品推荐
相关产品推荐

