跟踪由数百个子作业处理的 Azure WebJob 工作流的完成情况

Tracking Completion of an Azure WebJob Workflow when handled by hundreds of subjobs

我有一个要使用 Azure Webjobs 处理的文件处理工作流。有一个传入的 PDF,可能是一页或一千页。该文件被保存到 blob 存储中,一条消息排队等待开始处理。第一个 webjob 获取队列消息和文件并将 PDF 分成单独的页面,为页面写入 DB 记录,将它们栅格化为图像。然后对于每个页面,它将图像保存到 blob 存储并为页面处理器排队新消息(不同的队列)。第二个 webjob 处理单个页面图像(读取条形码、裁剪、更多数据库写入等)。

由于页面将被并行处理(每台机器多个作业和 Web 应用程序组中的多台机器),我正在尝试设计确定整个文件何时完成处理的最佳方法。即使我将每个页面的状态写入它的数据库记录,我也遇到了最终页面同时有效完成的竞争条件,并且我的脚本实际上没有 "last page" 可以检查。我是否需要一些外部进程来检查状态(查询每个页面都有一个 "finished" 标志)?关于如何最好地实现这一点的想法将不胜感激。

您似乎想构建一个处理 PDF 的批处理系统。

对于一些简单单一的处理,使用Azure WebJobs with Azure Storage是一个不错的选择,但似乎不适合你目前的需求。

根据我的经验,我的建议是你可以尝试使用Azure Batch Service to build the batch system which you can monitor the status of jobs. Please refer to the tutorial to know how to get started. Meanwhile, there is a offical sample project on GitHub and a GUI tool called Azure Batch Explorer which you can follow the blog来学习如何使用。