工作进程按顺序调用azure

时间:2011-07-17 17:54:12

标签: azure

如果前一个工作完成每个任务后必须按顺序调用多个工作进程(有一个包含指向blob的指针的队列,并且每个工作者都有多个实例。请参阅我之前的问题。)应该怎么做? Azure Fabric会自动执行此操作吗?或者有没有办法在配置文件中设置它?

2 个答案:

答案 0 :(得分:0)

您只需遵循您已经获得但具有更多图层的相同流程。如果worker 1从队列1读取内容,并且需要让worker 2知道它是时候开始处理同一个文件了,worker 1只是将消息放入队列2中。


编辑:好的,让我看看我是否完全理解你在这之后所做的事情。听起来你在这里有一批需要经历多个流程的文件,但是他们无法继续进行下一步,直到他们所有完成了前一步步骤

如果是这种情况,那么,不,Azure中没有任何内容可以自动为您执行此操作。

因此,如果可能的话,我会修改我的工作人员,这样就可以发送每个文件,而不必担心其他文件的状态。

如果无法做到这一点,那么您需要一些方法来监控哪些文件已经完成以及哪些文件仍处于待处理状态。一种方法(希望你可以扩展这个)是创建批处理的代码,在每个文件的某个地方创建一个进度行(SQL Azure或Azure表,它无关紧要),发送一个向worker 1发送消息并启动后台任务以监视此表。

当worker 1完成处理文件时,它会更新监控表中的相关行,说“工人1已完成”。

上面创建的后台线程等待,直到所有行都将“Worker 1 finished”设置为true,然后为Worker 2创建消息并开始查看“Worker 2 finished”标志。用尽可能多的工人步骤冲洗重复。

当所有步骤完成后,您可能希望后台任务清理此表,并且在某些情况下消息丢失时也会有某种超时。

答案 1 :(得分:0)

虽然@knightpfhor的建议可以解决问题,但我会尝试以更简单的方式解决这个问题而不引用工人的名字: - )

具体来说,如果有一种方法你已经知道需要处理多少文档,我首先会在表中创建N行,每个行都包含一些与当前批处理相关的信息,每个都将columnKey设置为批次ID。然后,我将N个消息放入队列中,让工作进程接收它们。完成每个工作程序后,它也会删除表中的相应行。一个监控过程就会知道一个批处理开始并且每隔一段时间进行一次计数(如果它不是临时的,或者工作人员在完成删除行之后会进行计数)并在相关队列中生成一条新消息下一个工人角色要处理。

如果你有更多的控制权,你可以在你的表中有一行存储进程的状态(处理文件,后处理)等。在这种情况下,我将状态转换存储在队列中,并确保你只做一次。但这完全是一个全新的问题。

希望它好起来。