Azure 服务总线触发函数 - 绑定到 MessageReceiver

Posted

技术标签:

【中文标题】Azure 服务总线触发函数 - 绑定到 MessageReceiver【英文标题】:Azure Service Bus Triggered Function - Bind to MessageReceiver 【发布时间】:2020-05-03 14:52:00 【问题描述】:

我正在尝试绑定到 Azure 服务总线触发函数中的 MessageReceiver。 我的目标是处理死信队列消息并完成它们。

    public static class Function1
    
        [FunctionName("Function1")]
        public static async Task Run(
                [ServiceBusTrigger(
                        "<topicName>", 
                        "<subscriptionName>/$DeadLetterQueue", 
                        Connection = "connectionstring")] 
                        Message message,
                        ILogger logger,
                        MessageReceiver messageReceiver)
        
            // TODO: Perform some actions

            await messageReceiver.CompleteAsync(message.SystemProperties.LockToken);
        

问题是它无法绑定到MessageReceiver 类。

Microsoft.Azure.WebJobs.Host:索引方法“Function1”出错。 Microsoft.Azure.WebJobs.Host:无法将参数“receiver”绑定到类型 MessageReceiver。确保绑定支持参数类型。如果您正在使用绑定扩展(例如 Azure 存储、ServiceBus、计时器等),请确保您已在启动代码中调用了扩展的注册方法(例如 builder.AddAzureStorage()、builder.AddServiceBus( )、builder.AddTimers() 等)。

关于绑定失败的任何想法?

【问题讨论】:

我修复了同样的问题,但出于某些单元测试目的,我必须使用 IMessageReceiver。但问题又来了。知道变量名应该是什么吗? 【参考方案1】:

我知道出了什么问题。我使用 'receiver' 作为 MessageReceiver 的参数名称。原来参数名称必须是'messageReceiver'。我最初看到的示例使用了“接收器”,所以这可能已经改变了吗?

【讨论】:

谢谢。我整个早上都在用头撞桌子,试图弄清楚为什么这不起作用。而且你的帖子比我发现的许多说你应该使用“reciever”作为参数名称的帖子都早。

以上是关于Azure 服务总线触发函数 - 绑定到 MessageReceiver的主要内容,如果未能解决你的问题,请参考以下文章

保护非 Http 触发的 Azure 函数,如服务总线触发器

失败的消息不会从 Azure 服务总线触发函数移动到 DLQ

服务总线触发 Azure 函数

Azure 服务总线触发队列在本地调试中未命中代码

如何使用自定义 INameResolver 配置由服务总线触发的 Azure 函数?

服务总线输出绑定在 Azure 中不起作用