【问题标题】:How to move a service bus messge to deadletter in service bus queue trigger function如何在服务总线队列触发功能中将服务总线消息移动到死信
【发布时间】:2020-07-26 05:09:10
【问题描述】:

如何通过服务总线队列触发函数将服务总线队列消息移动到死信

【问题讨论】:

    标签: azure function servicebus dead-letter queuetrigger


    【解决方案1】:

    我还没有尝试过,但是您可以将队列上的MaxDeliveryCount 属性设置为1,然后在触发时立即在函数中抛出异常。这样消息的传递计数将增加 1,并且服务总线将自动死信消息。

    【讨论】:

      【解决方案2】:

      通过在 Azure 门户中创建 Azure 函数触发器来读取死信队列消息。在函数中,提供 DLQ 的名称为“QueueName/$DeadLetterQueue”,如下图所示

      注意:如果你想从Topic中访问未投递的消息,那么读取死信队列的语法是“TopicName/Subscriptions/SubscriptionName/$DeadLetterQueue”。

      现在,定义应该如何处理 DLQ 消息。在这里,如下图所示,我们使用 Azure 服务总线将“myqueue”的 DLQ 消息发送到名为“queue”的 Topic

      通过这种方式,我们可以使用 Azure Functions 非常轻松地根据需要处理 DLQ 消息。

      【讨论】:

      • 我相信问题不在于从 DLQ 读取消息,而是将它们发送到 DLQ。
      【解决方案3】:

      https://github.com/Azure/azure-webjobs-sdk/issues/1986#issuecomment-433960534

      在 v3 中,您可以绑定到 MessageReceiver 类,该类公开了 DeadLetter、Abaondon、Complete 等方法。示例:

      public static async Task ProcessMessage(
         [ServiceBusTrigger("myqueue")] string message, int deliveryCount,
         MessageReceiver messageReceiver,
         string lockToken)
      {
         . . .
         await messageReceiver.DeadLetterAsync(lockToken);
         . . .
      }
      

      在此示例中,消息被绑定为字符串,并且包括 lockToken 在内的各种消息属性被绑定为参数。您还可以将消息绑定为消息类型并从那里访问必要的消息属性。在 v2 中,ServiceBus SDK 直接在 BrokeredMessage 类本身上公开了这些消息方法,但在最新版本的 SDK 中,这些方法不再存在,这意味着您必须绑定到 MessageReceiver 才能访问它们。

      编辑您还需要在执行此操作时将 AutoComplete 设置为 false。 https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-service-bus-trigger?tabs=csharp#configuration

      【讨论】:

      • 任何java例子?
      • 不幸的是,仅适用于 C#。 docs.microsoft.com/en-us/azure/azure-functions/…
      • 有效,但弹出错误"消息处理错误(Action=Complete)。提供的锁无效。要么锁已过期,要么消息已从队列中删除,或者被不同的接收器实例接收。” 不确定,但对我来说,Azure Function 似乎仍在尝试完成/放弃已经死信且不再在队列中的消息。就像它对我在函数内部手动处理消息一无所知。
      • 您需要在执行此操作时将AutoComplete 设置为false。 docs.microsoft.com/en-us/azure/azure-functions/…
      • 谢谢!不得不将Microsoft.Azure.WebJobs.Extensions.ServiceBus 包改为4.3.0,因为AutoComplete 属性最近才可用。它现在完美无缺,非常感谢。无疑为我节省了数小时的搜索时间。
      猜你喜欢
      • 2020-01-11
      • 1970-01-01
      • 2020-07-19
      • 2018-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-13
      相关资源
      最近更新 更多