Не совсем то, что вам нужно, но творческий обходной путь:
Добавьте выходную привязку служебной шины к вашей функции.Вместо мертвой буквы добавьте новое сообщение в вывод:
public static async Task Run(
[ServiceBusTrigger("myqueue", Connection = "mysb")] BrokeredMessage myQueueItem,
[ServiceBus("mydlq", Connection = "mysb")] IAsyncCollector<BrokeredMessage> dlq,
TraceWriter log)
{
try
{
// process message logic..
}
catch(CustomException ex)
{
// forward to "DLQ" when exception occurs
var dlqMessage = ...; // you need to create a new message here
await dlq.AddAsync(dlqMessage);
}
}
Исходное сообщение будет успешно завершено.
Обратите внимание, что вам нужно создать новый BrokeredMessage
и аккуратно скопировать все данные и метаданные из исходного сообщения.Если у вас нет метаданных, возможно, лучше изменить тип коллектора на что-то простое, например IAsyncCollector<string>
.