基于Service Bus触发消息内容的Azure Functions动态输入/输出绑定

时间:2019-07-29 07:06:56

标签: azure azure-functions azure-servicebus-queues

我正在尝试创建具有多个绑定的Azure Function 2.0。该功能由 Azure服务总线队列消息触发,我想根据此消息内容阅读 Blob 。我已经尝试过以下代码:

public static class Functions
{
    [FunctionName(nameof(MyFunctionName))]
    public static async Task MyFunctionName(
        [ServiceBusTrigger(Consts.QueueName, Connection = Consts.ServiceBusConnection)] string message,
        [Blob("container/{message}-xyz.txt", FileAccess.Read, Connection = "StorageConnName")] string blobContent
    )
    {
        // processing the blob content
    }
}

但是我遇到以下错误:

  

Microsoft.Azure.WebJobs.Host:错误索引方法“ MyFunctionName”。 Microsoft.Azure.WebJobs.Host:无法解析绑定参数“ message”。绑定表达式必须映射到触发器提供的值或触发器绑定到的值的属性,或者必须是系统绑定表达式(例如sys.randguid,sys.utcnow等)。

我在某处看到可以使用动态绑定,但是也许不可能基于另一个输入绑定来创建输入绑定。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我实际上感到惊讶,这没有用。有很多带有绑定的怪癖。请试一下:

public static class Functions
{
    [FunctionName(nameof(MyFunctionName))]
    public static async Task MyFunctionName(
        [ServiceBusTrigger(Consts.QueueName, Connection = Consts.ServiceBusConnection)] MyConcreteMessage message,
        [Blob("container/{message}-xyz.txt", FileAccess.Read, Connection = "StorageConnName")] string blobContent
    )
    {
        // processing the blob content
    }
}

创建DTO:

public class MyConcreteMessage 
{
    public string message {get;set;}
}

确保您在服务总线中使用的消息是这样的:

{
  "message": "MyAwesomeFile"
}

现在它应该能够读取您的绑定container/{message}-xyz.txt并识别出message