Как DeadLetter брокерское сообщение на пользовательское исключение - PullRequest
0 голосов
/ 07 мая 2018

Мне нужно принудительно переместить мое BrokeredMessage в очередь рассылки, если я получил пользовательское исключение. Вот мой код, который я использовал:

public static async Task Run([ServiceBusTrigger("myqueue", Connection = "myservicebus:cs")]BrokeredMessage myQueueItem, TraceWriter log)
{
    try
    {   
        // process message logic.. 
    }
    catch(CustomException ex)
    {
        //forcefully dead letter if custom exception occurs
        await myQueueItem.DeadLetterAsync();
    }           
}

Но иногда я получаю MessageLockLost, исключения, если я вызываю DeadLetterAsync, AbandonAsync() и т. Д., Явно в моем коде, даже если блокировка фактически не была потеряна. Может кто-нибудь подсказать мне, как лучше всего переместить посредническое сообщение в очередь DeadLetter для обработки пользовательских исключений. Спасибо.

1 Ответ

0 голосов
/ 07 мая 2018

Не совсем то, что вам нужно, но творческий обходной путь:

Добавьте выходную привязку служебной шины к вашей функции.Вместо мертвой буквы добавьте новое сообщение в вывод:

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>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...