基于自定义逻辑同时处理azure blob存储中的多个文件

基于自定义逻辑同时处理azure blob存储中的多个文件,azure,azure-functions,azure-functions-runtime,azure-functions-core-tools,Azure,Azure Functions,Azure Functions Runtime,Azure Functions Core Tools,我的确切要求如下: 我的blob存储“B1”中有一堆针对不同客户的文件。假设客户“C1”有10个文件,客户“C2”有10个文件,客户“C3”有10个文件 我想对每个文件执行一些操作,并将它们移动到blob存储“B2”。这可能需要30秒到5分钟,具体取决于文件中的数据 现在,我想同时为每个客户处理一个文件,但不能同时为同一客户处理多个文件 与客户“C1”的一个文件一样,“C2”的一个文件和“C3”的一个文件必须同时处理。因此,“C1”的处理时间不影响“C2”和“C3”。 但只有在第一个文件完成时,

我的确切要求如下:

我的blob存储“B1”中有一堆针对不同客户的文件。假设客户“C1”有10个文件,客户“C2”有10个文件,客户“C3”有10个文件

我想对每个文件执行一些操作,并将它们移动到blob存储“B2”。这可能需要30秒到5分钟,具体取决于文件中的数据

现在,我想同时为每个客户处理一个文件,但不能同时为同一客户处理多个文件

与客户“C1”的一个文件一样,“C2”的一个文件和“C3”的一个文件必须同时处理。因此,“C1”的处理时间不影响“C2”和“C3”。 但只有在第一个文件完成时,才会处理C1的下一个文件

使用Microsoft Azure功能实现此功能的最佳体系结构是什么

例如,我使用Azure函数V1实现了如下功能:

  • Blob触发的Azure函数:只要将任何文件放入Blob中,即可在Azure表中添加具有客户ID的文件名。此表将再包含一列“InQueue”,默认为FALSE

  • 时间触发的Azure功能:这将签入Azure表,并为所有文件均为InQueue=FALSE的每个客户获取第一个文件(意味着:没有正在处理的文件)。对于他们,更新InQueue=TRUE并将其名称添加到azure队列

  • 队列触发的Azure功能:只要任何文件在Azure队列中并在其上执行处理,就会触发此功能。一旦该过程完成,它将从azure表中删除该文件的条目。因此,现在对于该文件的客户,所有其他条目的“InQueue”=FALSE(无文件在处理中)

  • 所以在上面的体系结构中,时间触发的azure功能为每个客户处理一个文件,但它也将不同客户的多个文件推送到队列中。而且,由于队列触发,azure函数可以同时运行多个实例。不同客户的所有文件将同时执行


    我的建筑好吗?还是坏?或者我该如何改进它?还有哪些选项可以使我的流程更快、更简单或步骤更少?

    现在让您困惑的主要问题是我理解的是您希望同时执行多个功能。如果是这样,我建议您尝试使用并行分支的逻辑应用程序

    这是关于如何创建具有并行分支的逻辑应用程序的说明。这就是渲染。您还可以添加Azure功能作为操作。

    在这里,我使用了一个重复(时间表)作为一个触发器,您可以使用其他触发器。在每个分支之后,你也可以添加动作,就像图中所示。


    希望这能对您有所帮助,如果您还有其他问题,请告诉我。

    请对此发表评论。