如何绑定到 Azure 函数中的 MessageSender?

How to bind to MessageSender in an Azure function?

我正在使用服务总线队列和 Azure 函数。根据某些业务逻辑,失败的处理方式不同。有些消息需要发送到死信队列,其他消息需要修改然后显式添加回队列。

考虑以下代码:

[FunctionName("ServiceBusTask")]
public static async Task Run(
    [ServiceBusTrigger("myQueue", Connection = "myConnectionString")]
    Message message, 
    MessageReceiver messageReceiver, 
    //MessageSender messageSender, 
    ILogger log)
{
    //some business logic that can fail

    if( condition for dead letter)
    {
        await messageReceiver.DeadLetterAsync(message.SystemProperties.LockToken);
    }
    else if( condition for a manual retry)
    {
        QueueClient qc = new Queueclient("myQueue", "myConnectionString");
        Message updatedMessage = GetUpdatedMessage(message);
        await qc.SendAsync(updatedMessage);
        //await messageSender.SendAsync(updatedMessage);
    }
}

messageReceiver 可以很好地向死信队列发送消息,但令我困扰的是我需要创建一个 QueueClient 来向队列发送消息。知道 MessageSender 存在,我试图将它添加到参数中,但我收到一条错误消息:

Cannot bind parameter 'messageSender' to type MessageSender. Make sure the parameter Type is supported by the binding. If you're using binding extensions (e.g. Azure Storage, ServiceBus, Timers, etc.) make sure you've called the registration method for the extension(s) in your startup code (e.g. builder.AddAzureStorage(), builder.AddServiceBus(), builder.AddTimers(), etc.).

我不太清楚为什么它告诉我启动代码,我没有这样的东西所以我猜错误消息没有更新...

阅读this issue on the Azure webjobs SDK,感觉应该支持(看错了请指正!)

我的问题

是否可以像这样使用 MessageSender?如果可以,我需要做什么才能让它工作?

您的函数使用 ServiceBusTrigger,它支持 MessageReceiver,但不支持 MessageSender 绑定 - ServiceBus 输出绑定支持,您可以添加到你的功能。 (example)