Azure Functions - 从队列触发器绑定 blob 列表
Azure Functions - bind a list of blobs from a queue trigger
我正在编写一个函数,将大量输入图像拼接成一个高图像,并将其保存到输出 blob。有没有办法绑定到来自队列触发器的可变数量的输入?
这是一个示例队列项目:
{
"inputIds": [1001, 1002, 1003, 1004], // Input blobs "inputs/1001.jpg", etc.
"outputId": 15 // Output blob "output/15.jpg"
}
我查看了选项 in the docs,我目前的想法是在 CloudBlobContainer
上使用 [Blob]
属性,我认为这是允许的:
[FunctionName("stitch")]
public static async Task Run(
[QueueTrigger("stitch")]QueueItem queueItem,
[Blob("inputs")]CloudBlobContainer inputContainer,
[Blob("results/{outputId}.jpg")]CloudBlockBlob output)
{
IList<CloudBlockBlob> inputs = await GetBlobsAsync(inputContainer, queueItem.InputIds);
Stream result = ConcatImages(inputs);
await output.UploadFromStreamAsync(result);
}
在这种情况下,QueueItem
是自定义的 class,GetBlobsAsync()
和 ConcatImages()
是我可以实现的功能。
但是我可以直接绑定到一个IEnumerable<CloudBlockBlob>
(或IEnumerable<Stream>
)吗?如果可以,我将如何编写[Blob]
输入属性?
编辑:我可以在不将所有输入 blob 内容同时加载到内存的情况下这样做吗?我需要一次播放一个。
我建议你的架构是错误的。
您似乎正确地使用了队列触发器和定义成像拼接任务范围的负载 QueueItem,但为什么要绑定到输入 blob 存储?当您循环遍历 inputId 时,需要在您的代码中动态获取输入 blob。这样做还可以解决您对同时将所有输入 blob 存储在内存中的其他担忧。
我正在编写一个函数,将大量输入图像拼接成一个高图像,并将其保存到输出 blob。有没有办法绑定到来自队列触发器的可变数量的输入?
这是一个示例队列项目:
{
"inputIds": [1001, 1002, 1003, 1004], // Input blobs "inputs/1001.jpg", etc.
"outputId": 15 // Output blob "output/15.jpg"
}
我查看了选项 in the docs,我目前的想法是在 CloudBlobContainer
上使用 [Blob]
属性,我认为这是允许的:
[FunctionName("stitch")]
public static async Task Run(
[QueueTrigger("stitch")]QueueItem queueItem,
[Blob("inputs")]CloudBlobContainer inputContainer,
[Blob("results/{outputId}.jpg")]CloudBlockBlob output)
{
IList<CloudBlockBlob> inputs = await GetBlobsAsync(inputContainer, queueItem.InputIds);
Stream result = ConcatImages(inputs);
await output.UploadFromStreamAsync(result);
}
在这种情况下,QueueItem
是自定义的 class,GetBlobsAsync()
和 ConcatImages()
是我可以实现的功能。
但是我可以直接绑定到一个IEnumerable<CloudBlockBlob>
(或IEnumerable<Stream>
)吗?如果可以,我将如何编写[Blob]
输入属性?
编辑:我可以在不将所有输入 blob 内容同时加载到内存的情况下这样做吗?我需要一次播放一个。
我建议你的架构是错误的。
您似乎正确地使用了队列触发器和定义成像拼接任务范围的负载 QueueItem,但为什么要绑定到输入 blob 存储?当您循环遍历 inputId 时,需要在您的代码中动态获取输入 blob。这样做还可以解决您对同时将所有输入 blob 存储在内存中的其他担忧。