Azure WebJobs和ServiceBusTrigger

时间:2015-02-02 22:32:43

标签: c# azure azure-webjobs azureservicebus azure-webjobssdk

针对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 个答案:

答案 0 :(得分:7)

看起来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本身处理有害消息。

答案 1 :(得分:7)

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

答案 2 :(得分:1)

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

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