如何在服务总线队列触发功能中将服务总线消息移动到死信

时间:2020-04-13 15:35:04

标签: azure function servicebus dead-letter queuetrigger

如何通过服务总线队列触发功能将服务总线队列消息移至死信

3 个答案:

答案 0 :(得分:1)

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

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

<a id = "anchor-{{my_post.id}}">
                    anchor-{{my_post.id}}
                </a>

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

答案 1 :(得分:0)

我还没有尝试过,但是您可以做的是将队列上的MaxDeliveryCount属性设置为1,然后在触发后立即在函数中引发异常。这样,邮件的传递计数将增加1,并且Service Bus将自动对邮件进行死信处理。

答案 2 :(得分:0)

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

enter image description here

注意:如果您要访问主题中未发送的消息,则读取死信队列的语法为“ TopicName / Subscriptions / SubscriptionName / $ DeadLetterQueue”。

现在,定义应该使用DLQ消息执行的操作。在这里,如下面的屏幕快照所示,我们正在使用Azure Service Bus将“ myqueue”的DLQ消息发送到名为“ queue”的主题

enter image description here

enter image description here

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