针对Azure WebJobs SDK的ServiceBusTrigger
,有害消息处理是如何工作的?我希望将已经出队超过'x'次的服务总线队列消息推送到不同的ServiceBus(或)存储队列
来自here的在线文档here和here以及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();
}
答案 0 :(得分:7)
看起来WebJobs目前在内部处理这个问题。
参考:How to use Azure Service Bus with the WebJobs SDK
具体部分:
ServicebusTrigger如何运作
SDK以PeekLock模式接收消息并在其上调用Complete 如果函数成功完成,则显示消息,如果函数成功则调用Abandon 功能失败。如果函数运行的时间超过PeekLock超时, 锁定会自动更新。
Service Bus执行自己的毒性队列处理,因此两者都没有 由WebJobs SDK控制,也不可配置。
无法在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