Как я могу обрабатывать недоставленные сообщения, исходящие из темы

У меня есть тема и подписка, которые обрабатываются в лазурном веб-задании, но некоторые сообщения должны быть перемещены в мертвую букву (очередь или тема?) После определенного количества попыток. Я понятия не имею, что нужно для обработки мертвых писем. Есть ли у кого-нибудь пример кода? Возможно ли это с помощью лазурных веб-заданий?

Я почти сдаюсь и делаю это вручную, используя счетчик повторов. На данный момент я этим занимаюсь, но мне не очень нравится идея добавить сообщение обратно в ту же очередь:


public void SynchronizeConsumer( 
    [ServiceBusTrigger("topic")] Consumer consumer, 
    [ServiceBus("topic")] ICollector withError) 
{ 
    try 
    { 
          this.consumerSync.SyncConsumer(consumer); 
    } 
    catch (Exception ex) 
    { 
          consumer.NbOfRetries++; consumersWithError.Add(consumer); 
    } 
}

person user1075679    schedule 26.07.2016    source источник
comment


Ответы (1)


Ваши сообщения будут перемещены в подписку на мертвые письма (= подочередь). Вы можете получить доступ к сообщениям из подписки на мертвые письма так же, как вы получаете доступ к сообщениям из обычной подписки.

Путь к вашей подписке на мертвые письма:

topicPath/Subscriptions/subscriptionName/$DeadLetterQueue

Если вы используете ServiceBusTrigger, ваша функция должна выглядеть так:

public void ProcessMessage(
    [ServiceBusTrigger("topicName", "subscriptionName")] BrokeredMessage message)
{
    try
    {
        // Process you message
        ...

        // Complete the message
        message.Complete();
    }
    catch
    {
        message.Abandon();
    }
}

Таким образом, функция доступа к подписке на мертвые письма должна быть примерно такой:

public void ProcessDeadletterMessage(
    [ServiceBusTrigger("topicName", "subscriptionName/$DeadLetterQueue")] BrokeredMessage message)
{
    ...
}
person Thomas    schedule 26.07.2016