Я пытаюсь получить сообщение из очереди с помощью триггера очереди служебной шины и выполнить некоторую работу, выполнение которой займет некоторое время. Я не хочу, чтобы другой процессор выбирал сообщение, пока я обрабатываю сообщение. У меня есть следующая конфигурация в host.json. Когда я получаю сообщение из очереди на await Receiver.CompleteAsync (lockToken);, я получаю исключение. Предоставленная блокировка недействительна. Либо срок блокировки истек, либо сообщение уже удалено из очереди.
"serviceBus": {
"prefetchCount": 1,
"autoRenewTimeout": "00:05:00",
"messageHandlerOptions": {
"autoComplete": false,
"maxConcurrentCalls": 1,
"maxAutoRenewDuration": "00:04:00"
}
}
Код из функции Azure приведен ниже.
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 минут? - person Sean Feldman   schedule 25.08.2020