首页 文章

Azure WebJobs和ServiceBusTrigger

提问于
浏览
7

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

来自here的在线文档herehere以及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();
        }

3 回答

  • 1

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

  • 6

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

    参考:How to use Azure Service Bus with the WebJobs SDK

    具体部分:

    ServicebusTrigger如何工作SDK在PeekLock模式下接收消息,如果函数成功完成,则在消息上调用Complete;如果函数失败,则调用Abandon . 如果该函数的运行时间超过PeekLock超时,则会自动更新锁定 . Service Bus执行自己的毒性队列处理,因此既不受WebJobs SDK控制,也不可配置 .

    Additional Reference

    无法在Azure功能中控制或配置毒性消息处理 . Service Bus本身处理有害消息 .

  • 7

    为了添加Brendan Green的答案,WebJobs SDK会对无法处理的消息调用Abandon,并且在最大重试次数之后,这些消息将被服务总线移动到死信队列 . 可以在Service Bus - > Queue - > Properties中更改定义何时将消息移动到死信队列中的属性,例如最大传送计数,生存时间和PeekLock持续时间 .

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

相关问题