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

时间:2019-01-29 19:06:33

标签: c# .net-core azure-functions azureservicebus azure-servicebus-queues

我正在使用服务总线队列和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存在后,我尝试将其添加到参数中,但出现一条错误消息:

  

无法将参数'messageSender'绑定为MessageSender类型。确保绑定支持参数类型。如果您使用绑定扩展(例如Azure存储,ServiceBus,Timer等),请确保已在启动代码中调用了扩展的注册方法(例如builder.AddAzureStorage(),builder.AddServiceBus( ),builder.AddTimers()等)。

我不太确定为什么要告诉我有关启动代码的信息,我没有这样的事情,所以我猜错误消息没有更新...

阅读this issue on the Azure webjobs SDK时,我得到它应该受到支持的印象(如果我读错了,请纠正我!)。

我的问题

是否可以像这样使用MessageSender,如果可以,我该怎么做才能使其正常工作?

1 个答案:

答案 0 :(得分:2)

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