【发布时间】:2020-12-13 23:37:36
【问题描述】:
我正在尝试使用服务总线队列触发器从队列中使用消息并执行一些需要一些时间才能完成的工作。我不希望其他处理器在我处理消息时选择消息。我在 host.json 中有以下配置。当我在 await receiver.CompleteAsync(lockToken); 处收到来自队列的消息时 我收到一个异常“提供的锁无效。锁已过期,或者消息已从队列中删除。”
"serviceBus": {
"prefetchCount": 1,
"autoRenewTimeout": "00:05:00",
"messageHandlerOptions": {
"autoComplete": false,
"maxConcurrentCalls": 1,
"maxAutoRenewDuration": "00:04:00"
}
}
来自 Azure Function 的代码如下
public static void Run([ServiceBusTrigger("testqueue", Connection = "AzureServiceBus.ConnectionString")]Message message, MessageReceiver messageReceiver,ILogger log)
{
log.LogInformation($"C# ServiceBus queue trigger function processed message: {messageReceiver.ClientId}");
log.LogInformation($"Message={Encoding.UTF8.GetString(message.Body)}");
string lockToken = message.SystemProperties.LockToken;
log.LogInformation($"Processing Message:={Encoding.UTF8.GetString(message.Body)}");
DoSomeJob(messageReceiver, lockToken,log);
}
public static async void DoSomeJob(MessageReceiver receiver,string lockToken, ILogger log)
{
try
{
await Task.Delay(360000);
await receiver.CompleteAsync(lockToken);
}
catch (Exception ex)
{
log.LogInformation($"Error In Job={ex}");
}
}
【问题讨论】:
-
你没有说有问题。
-
我在推断问题 - 尽管
maxAutoRenewDuration设置为 10 分钟,为什么锁会丢失?
标签: c# azure azure-functions azureservicebus azure-servicebus-queues