9

Azure WebJobs SDK 的毒消息处理如何工作ServiceBusTrigger?我希望将出列次数超过“x”次的服务总线队列消息推送到不同的服务总线(或)存储队列

此处此处的在线文档以及此处的 SDK 示例没有关于 ServiceBusTrigger 的毒消息处理如何工作的示例。这项工作正在进行吗?

我尝试使用dequeueCount参数实现自定义毒消息处理,但它看起来不支持 ServiceBusTriggers,因为我遇到了运行时异常{"Cannot bind parameter 'dequeueCount' when using this trigger."}

public static void ProcessMessage([ServiceBusTrigger(topicName: "abc", subscriptionName: "abc.gdp")] NotificationMessage message,
            [Blob("rox/{PayloadId}", FileAccess.Read)] Stream blobInput, Int32 dequeueCount)
        {
            throw new ArgumentNullException();
        }
4

3 回答 3

8

虽然您无法获取dequeueCountServiceBus 消息的属性,但您始终可以绑定到BrokeredMessage而不是NotificationMessage从中获取属性。

于 2015-02-03T15:43:07.093 回答
7

看起来 WebJobs 目前在内部处理这个问题。

参考:如何将 Azure 服务总线与 WebJobs SDK 结合使用

具体部分:

ServicebusTrigger 的工作原理

SDK 在 PeekLock 模式下接收消息,如果函数成功完成,则对该消息调用 Complete,如果函数失败,则调用 Abandon。如果函数运行时间超过 PeekLock 超时时间,则会自动更新锁。

Service Bus 自己处理毒物队列,因此它既不受 WebJobs SDK 控制,也不受 WebJobs SDK 的配置。

附加参考

无法在 Azure Functions 中控制或配置毒药消息处理。服务总线自己处理有害消息。

于 2015-02-03T00:12:31.737 回答
2

为了补充 Brendan Green 的答案,WebJobs SDK 对未能处理的消息调用 Abandon,并且在最大重试次数后,这些消息被服务总线移动到死信队列。定义何时将消息移入死信队列的属性,例如最大传递计数、生存时间和 PeekLock 持续时间可以在服务总线 -> 队列 -> 属性中更改。

您可以在此处找到有关 SB 死信队列的更多信息:https ://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dead-letter-queues

于 2017-05-07T18:57:28.703 回答