将多个 Blob 输入传递到 QueueTrigger Azure 函数的最佳方法



问题

触发后,生成 3 个 XML 文件,完成后,将它们 ftp 到站点。

当前的方法

我有一个HTTP触发器Azure函数,运行时将构造3个XML文件,并将其保存到Azure存储Blob容器中。由于多个输出,并且需要控制输出路径/文件名,我使用 命令式绑定方法,并在我的函数中使用IBinder outputBinder。这一切都很好。Blob 存储中的输出路径示例是export/2017-03-22/file-2017-03-22T12.03.02.54.xml。该文件位于带有日期的文件夹中,每个文件名都有时间戳以确保唯一性。

当所有 3 个文件都生成时,我想触发另一个函数,将这些文件FTP 到站点。现在,我最初认为我应该使用 blob 触发器,但我不知道如何在文件名和路径是动态的输入上触发。我在 blob 触发器文档中找不到这样的示例。

因此,我想我可以将 HTTP 触发器输出到声明性绑定,并将 XML 文件输出到 blob 存储中的outgoing容器中,我的 blob 触发器可以查看该容器。但是,这也可以工作,因为我的函数在消耗计划中,因此每天最多可以有 10 分钟来处理新 blob。

因此,记录的替代方法是使用队列触发器。我可以输出到我的队列并让队列触发器很好,但是如何将 3 个 XML 流传递给我的 QueueTrigger 函数?

我想作为回退,我可以发布一个可以包含构造 XML 的 Azure 存储路径的对象,然后使用存储 SDK 提取流并使用它来发布到 FTP,但是将这些存储 Blob 流作为输入传递给我的 QueueTrigger 会更有效吗?

我认为您使用队列触发器的方法很有意义。我会构建这样的消息

public class QueueItem
{
public string FirstBlobPath { get; set; }
public string SecondBlobPath { get; set; }
public string ThirdBlobPath { get; set; }
}

然后在队列处理函数中使用声明性绑定,类似于

{
"bindings": [
{
"type": "queueTrigger",
"name": "item",
"direction": "in",
"queueName": "myqueue",
"connection":"...",    
},
{
"type": "blob",
"name": "file1",
"path": "mycontainer/{FirstBlobPath}",
"connection": "...",
"direction": "in"
},
{
"type": "blob",
"name": "file2",
"path": "mycontainer/{SecondBlobPath}",
"connection": "...",
"direction": "in"
},
{
"type": "blob",
"name": "file3",
"path": "mycontainer/{ThirdBlobPath}",
"connection": "...",
"direction": "in"
}
],
"disabled": false
}

和功能

public static void Run(QueueItem item, Stream file1, Stream file2, Stream file3)
{
}

相关内容

  • 没有找到相关文章

最新更新