【发布时间】:2020-07-26 05:09:10
【问题描述】:
如何通过服务总线队列触发函数将服务总线队列消息移动到死信
【问题讨论】:
标签: azure function servicebus dead-letter queuetrigger
如何通过服务总线队列触发函数将服务总线队列消息移动到死信
【问题讨论】:
标签: azure function servicebus dead-letter queuetrigger
我还没有尝试过,但是您可以将队列上的MaxDeliveryCount 属性设置为1,然后在触发时立即在函数中抛出异常。这样消息的传递计数将增加 1,并且服务总线将自动死信消息。
【讨论】:
通过在 Azure 门户中创建 Azure 函数触发器来读取死信队列消息。在函数中,提供 DLQ 的名称为“QueueName/$DeadLetterQueue”,如下图所示
注意:如果你想从Topic中访问未投递的消息,那么读取死信队列的语法是“TopicName/Subscriptions/SubscriptionName/$DeadLetterQueue”。
现在,定义应该如何处理 DLQ 消息。在这里,如下图所示,我们使用 Azure 服务总线将“myqueue”的 DLQ 消息发送到名为“queue”的 Topic
通过这种方式,我们可以使用 Azure Functions 非常轻松地根据需要处理 DLQ 消息。
【讨论】:
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
【讨论】:
AutoComplete 设置为false。 docs.microsoft.com/en-us/azure/azure-functions/…
Microsoft.Azure.WebJobs.Extensions.ServiceBus 包改为4.3.0,因为AutoComplete 属性最近才可用。它现在完美无缺,非常感谢。无疑为我节省了数小时的搜索时间。