На самом деле об этой проблеме есть проблема в github: Как преднамеренно обработать сообщение в azure functions v2 .
Во-первых, для класса Message нет метода DeadLetterAsync
Для v2 или выше вы должны использовать MessageReceiver
для его реализации.
Тогда речь идет о токене блокировки, потому что функция запуска служебной шины автоматически завершит сообщение и вызовет исключение, если вы захотите DeadLetterAsync
самостоятельно. Вам нужно изменить хост. json, изменить autoComplete
на flase, вы можете обратиться к этому хосту. json setting .
Ниже приведен мой код, throw исключение и DeadLetter.
[FunctionName("Function1")]
public static async System.Threading.Tasks.Task RunAsync([ServiceBusTrigger("myqueue",Connection = "ServiceBusConnectionString")]string myQueueItem, MessageReceiver messageReceiver, string lockToken, ILogger log)
{
try
{
throw new Exception();
}
catch (Exception) {
await messageReceiver.DeadLetterAsync(lockToken);
log.LogInformation(myQueueItem+ " is put into deadletter");
}
}
Вот мой хозяин. json.
{
"version": "2.0",
"extensions": {
"serviceBus": {
"prefetchCount": 100,
"messageHandlerOptions": {
"autoComplete": false,
"maxConcurrentCalls": 32,
"maxAutoRenewDuration": "00:55:00"
},
"sessionHandlerOptions": {
"autoComplete": false,
"messageWaitTimeout": "00:00:30",
"maxAutoRenewDuration": "00:55:00",
"maxConcurrentSessions": 16
}
}
}
}