0

我想在我们的 Web/Worker 角色上定期(每天)执行某项任务。我的云服务中有多个实例,并且我希望这些实例中的一个每天执行此任务(例如 Instance0 可以在一天完成,第二天它可能是 Instance1 完成工作,但 0 和 1 不会尝试在同一天/同一时间做同样的工作)

Azure 队列似乎是实现这一目标的好方法,因为根据设计,只有一个实例会将消息出列(假设它在完成工作后将其删除)。

我遇到的麻烦是想办法每天只将此消息的一个副本放入队列中。我想做到这一点的唯一方法是每天从 Azure 调度程序作业中排队一条消息。

我对 Azure 调度程序的问题是,我需要为我在所有部署中拥有的每个存储帐户创建一个作业。

有没有办法从云服务中做到这一点,而不需要依赖调度程序?

4

2 回答 2

1

如果您不想依赖调度程序,请考虑使用 Blob 租约作为某种信号量。http://justazure.com/azure-blob-storage-part-8-blob-leases/

在一天中的某个时间,让您的工作实例竞争以获取某个中央存储 blob 的租约。无论谁获得租约,都可以阻止其他实例获得该租约,并且可以将消息排队到队列中。

说了这么多,为什么还怕Scheduler依赖呢?让它启动一项将排队“开始工作”消息的工作。让您的实例监控该队列。接收该消息的任何人都可以通过您的所有存储帐户运行,并将单个存储工作消息排队以供所有实例接收。

于 2015-07-10T20:32:41.643 回答
0

如果您知道每天需要执行一项工作,我不明白您为什么需要使用队列 - 您可以每天运行一次预定的工作。如果仅在满足某个条件时才需要运行作业,我只需将此逻辑构建到您的计划任务中 - 也许通过在表中设置属性或类似的东西。

于 2015-07-11T21:08:50.333 回答