代码之家  ›  专栏  ›  技术社区  ›  Alex

使用Azure函数ServiceBus触发的函数对BrokeredMessage调用.Complete或.DeadLetter

  •  1
  • Alex  · 技术社区  · 8 年前

    我正在使用服务总线队列触发函数。

    当我们手动( )死信断线消息,它确实会进入死信队列。
    但是,运行时报告以下错误:

    示例函数:

    [FunctionName("MySbFunction")]
    public static async Task Run(
        [ServiceBusTrigger("topic-name", "subscription-name", AccessRights.Manage, Connection = "xxx")] BrokeredMessage msg,
        ILogger log)
    {
        await msg.DeadLetterAsync();
    }   
    

    如果我们 .CompleteAsync(); 改为消息-消息 已完成,但运行时抛出错误。

    我知道通常的死信方式是在执行期间抛出异常,导致函数失败,然后重试消息。

    我之所以想 .completeSync(); 要重试的消息:

    • .Clone(); 原作 BrokeredMessage
    • 设置它 ScheduledEnqueueTimeUtc
    • .completeSync(); 原始信息
    • 将克隆的消息放回队列(通过输出绑定)

    完成 超出预期流的消息。

    1 回复  |  直到 8 年前
        1
  •  2
  •   Mikhail Shilkov    8 年前

    问题是运行时自己管理服务总线消息完成,调用 Complete 成功调用或 Abandon

    有一个 feature request 选择退出此类行为并在函数内部手动管理完成。修复已经实现,我不确定它是否在当前运行时,但文档尚未更新。

    按照上面的问题来了解状态。