如何处理来自主题的死信消息

时间:2016-07-26 17:16:09

标签: azure azureservicebus azure-webjobs azure-webjobssdk azure-servicebus-topics

我有一个在天蓝色Web作业中处理的主题和订阅,但是在一定量的重试之后,某些消息应该移动到死信(队列或主题?)。我不知道如何处理死信信息。有人有代码示例吗?这可以用天蓝色的网络工作吗?

我几乎放弃并使用重试计数器手动完成。 暂时,我正在做的事情,但我真的不喜欢将消息添加回同一队列的想法:


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

1 个答案:

答案 0 :(得分:4)

您的邮件将被移至deadletter订阅(=子队列)。您可以像访问正常订阅中的消息一样访问deadletter订阅中的消息。

您的死信订阅的路径是:

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();
    }
}

因此,访问deadletter订阅的功能应该是这样的:

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