【问题标题】:Azure WebJobs SDK Service Bus DeadLetter queueAzure WebJobs SDK 服务总线死信队列
【发布时间】:2014-12-09 20:29:32
【问题描述】:

使用 WebJobs SDK 时,将 BrokeredMessage 移动到死信队列的正确方法是什么?通常我只会调用 msg.DeadLetter()。但是,SDK 负责管理代理消息的生命周期。如果方法返回成功,它将调用 msg.Complete(),如果发生异常,它将重试消息。我需要告诉 ServiceBus 队列将消息移动到死信队列的第 3 种情况,因为它是一条错误消息。

【问题讨论】:

    标签: azure servicebus azure-webjobs azure-webjobssdk


    【解决方案1】:

    您可以显式地对服务总线队列进行死信处理,并在消息被死信处理时触发一个函数。

    public static void ProcessSBQueueMessage(
    [ServiceBusTrigger("inputqueue")] BrokeredMessage inputText)
    {
        inputText.DeadLetter("Webjobs", "webjobsdescription");
        Console.WriteLine(inputText);
    }
    
    public static void ProcessSBDeadLetterQueueMessage(
    [ServiceBusTrigger("inputqueue/$DeadLetterQueue")] BrokeredMessage inputText)
    {
        Console.WriteLine(inputText);
    }
    

    【讨论】:

    • 太好了,感谢您提供的信息。我不确定直接调用 DeadLetter 是否可以。也可以直接调用 Complete 还是建议让 SDK 管理完成?
    • 我总是调用 .Complete()。我不知道 SDK 会知道如何知道作业是否完成。
    • 在传递给jobHostConfig.UseServiceBus(..)Microsoft.Azure.WebJobs.ServiceBus.ServiceBusConfiguration 对象上,设置MessageOptions = new OnMessageOptions { AutoComplete = true } 以控制自动完成行为。您可以将此设置为 false 并将您的 Trigger 参数更改为 BrokeredMessage,或者如果您仍然需要变得更复杂,您也可以覆盖 ServiceBusConfiguration.MessagingProvider。 (例如,如果您正在处理 MaxConcurrentCall > 1 的序列)这也是您设置给定 JobHost 可以处理的并发消息数的地方。
    猜你喜欢
    • 2018-04-01
    • 2020-09-20
    • 2017-07-01
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    • 2017-02-13
    • 2017-06-07
    • 1970-01-01
    相关资源
    最近更新 更多