我想定期(每天)对我们的Web / Worker角色执行某项任务。我的Cloud Service中有多个实例,我希望每天只有其中一个实例执行此任务(例如,Instance0可以在某一天完成,第二天可能是Instance1正在完成工作,但0和1不会尝试在同一天/期间做同样的工作)
Azure队列似乎是实现这一目标的好方法,因为通过设计,只有一个实例会使消息出列(假设它在完成工作后将其删除)。
我遇到的问题是找出一种方法,每天只在队列中放入一条此邮件的副本。我想要做的唯一方法是每天从Azure调度程序作业中添加一条消息。
我的Azure调度程序问题是我需要为我在所有部署中使用的每个存储帐户创建一个作业。
有没有办法在云服务中执行此操作,而不考虑调度程序依赖性?
答案 0 :(得分:1)
如果您不想要与Scheduler相关,请考虑使用Blob租约作为各种信号量。 http://justazure.com/azure-blob-storage-part-8-blob-leases/
在一天中的某个时间,让您的工作人员实例竞争以获得某些中央存储blob的租约。获得租约的任何人都可以阻止其他实例获得该租约,并可以将消息排入队列。
话虽如此,你为什么害怕Scheduler依赖?让它开始一个工作,排队等待开始工作"信息。让您的实例监视该队列。然后,无论谁接收到该消息,都可以通过所有存储帐户运行,并将所有实例的单个存储工作消息排队等等。
答案 1 :(得分:0)
如果你知道你每天需要完成一份工作,我就不明白为什么你需要使用一个队列 - 你可以每天运行一次预定的工作。如果只有满足某个条件才需要运行作业,我只需将此逻辑构建到您的计划任务中 - 可以通过在表中设置属性或类似的东西。