azure - 如何处理来自某个主题的死信消息

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

我有一个在 azure web 作业中处理的主题和订阅,但在经过一定次数的重试后,某些消息应移至死信(队列或主题?)。我不知道如何处理死信消息。有人有代码示例吗? Azure 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); 
    } 
}

最佳答案

您的消息将被移动到死信订阅(=子队列)。您可以像访问普通订阅中的消息一样访问死信订阅中的消息。

您的死信订阅路径是:

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)
{
    ...
}

关于azure - 如何处理来自某个主题的死信消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38596141/

相关文章:

azure - 使用托管标识从逻辑应用调用受 Azure AD 保护的 API

azure - ServiceBusTriggers 如何管理 ServiceBusReceivers

azure - 在 Azure 服务总线实体名称中使用斜杠字符

azure - 无法使用应用服务上的 Azure MSI 访问 Key Vault

c# - Azure Function 表示无法绑定(bind)参数

Azure Blob 自定义角色

Azure vnet 对等互连 : property "remoteAddressSpace" unclear

azure - 是否可以防止两个进程写入同一个缓存项?

java - 从 Azure Web 作业调用 Powershell 脚本

azure - 如何在没有 "Always On"的情况下保持 Azure WebJob 运行