将大型任务拆分为 Azure 函数并收集结果(通过服务总线实施屏障)

Splitting a large task to Azure functions and collecting the results (implementing a barrier over a service-bus)

我有需要在 Azure 中执行的任务。每个任务都分为几个部分,需要 运行 并行处理。事先不知道零件的数量。

我想使用 Azure 函数和服务总线来实现它。我在考虑以下架构:

我在服务总线上接收任务。 Func 1 确定应创建多少子部分,Func 2 执行工作,func 3 收集结果并使用服务总线传递它们。

我找不到一种有效的机制来收集(可变)数量的子结果并知道什么时候一切都完成了;如果所有子部分都准备好将组合结果传递给输出服务总线。

Azure 中是否有这样一种机制,用于从并行子部分收集结果,并且仅在一切准备就绪后才将数据发送到下一阶段? (这就像barrier同步机制)。

我的做法:

函数 1 从它的消息队列中获取工作。它创建一个 jobId (GUID),用于关联所有部分。它将工作分解成子部分并将 jobId 和子部分记录在数据库中。

每个子部分成为一条消息,添加到 Func 2 正在侦听的消息队列中。

Func 2 接收并处理消息后,它会将一条消息放入 Func 3 的队列中。

Func 3 在数据库中记录作业的这个子部分已经完成,并检查现在是否所有子部分都已完成。如果不是,什么都不做,如果是,它现在知道一切都已经完成,可以继续了。

检查逻辑应用程序来管理整个过程。您可以 trigger from Service Bus, invoke individual functions 通过循环等并将结果合并回文档。