【问题标题】:Azure service bus dead letter queuesAzure 服务总线死信队列
【发布时间】:2018-04-01 12:42:10
【问题描述】:

我正在使用Azure服务总线主题和订阅机制,并且想要处理所有在死信队列中的消息。

此外,我想通过 C# 中的 azure web 作业处理消息并将它们发送回队列。所以我想知道如何通过我的应用程序处理死信队列上的消息?

【问题讨论】:

  • 坦率地说,我不明白你到底在问什么。你能改写一下吗?
  • 微软员工的另一条巨魔评论。这是在 Mac 和 Linux 上处理 Microsoft Azure 服务总线死信队列的唯一方法,因为 Azure 服务总线资源管理器工具仅适用于 Windows,无法通过门户查看。

标签: azure azureservicebus


【解决方案1】:

当消息被死信时,它会进入死信队列,以便从中读取它的订阅。您可以像访问原始订阅一样访问它,只是将 /$DeadLetterQueue 附加到订阅名称。

【讨论】:

    【解决方案2】:

    此外,我想通过 C# 中的 azure web 作业处理消息并将它们发送回队列。

    正如 spodger 指出的,您的死信订阅路径将是:

    {topic-path}/Subscriptions/{subcription-name}/$DeadLetterQueue
    

    您可以使用 WebJobs SDK for Service Bus 并利用 ServiceBusTrigger 来访问您的死信队列消息,如下所示:

    public void ProcessDeadletterQueue(
        [ServiceBusTrigger("topicName", "subscriptionName/$DeadLetterQueue")] BrokeredMessage message)
    {
        //TODO:
    }
    

    更多详情可以参考here

    【讨论】:

      【解决方案3】:

      当来自服务总线实体(队列或主题订阅)的消息被死信时,它将被移动到同一实体的死信路径。死信的原因将在消息的自定义属性 DeadLetterReasonDeadLetterErrorDescription 中提供。

      为了接收死信消息,

      string path = Microsoft.ServiceBus.Messaging.SubscriptionClient.FormatDeadLetterPath(topicPath, subscriptionName);    
      var subscriptionClient = SubscriptionClient.CreateFromConnectionString(connectionString, path);  
      BrokeredMessage message = subscriptionClient.Receive();
      

      【讨论】:

      • 我在最新的 (4.1.1) Microsoft.Azure.ServiceBus 客户端库中找不到 FormatDeadLetterPath
      • Microsoft.Azure.ServiceBus 客户端库中,您需要使用 EntityNameHelper 而不是 SubscriptionClient
      猜你喜欢
      • 2014-12-09
      • 2020-09-20
      • 2017-07-01
      • 2017-08-13
      • 1970-01-01
      • 1970-01-01
      • 2017-02-13
      • 2017-06-07
      • 1970-01-01
      相关资源
      最近更新 更多