Azure队列:仅从一个辅助角色实例定期为消息排队



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

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

我遇到的麻烦是找出一种方法,每天只把这个消息的一个副本放在队列中。我想到要做到这一点的唯一方法是每天从Azure调度器作业中排队发送消息。

我使用Azure调度器的问题是,我需要为所有部署中的每个存储帐户创建一个作业。

有没有一种方法可以在云服务中做到这一点,而不依赖于调度程序?

如果不想依赖Scheduler,可以考虑使用Blob租约作为各种信号量。http://justazure.com/azure-blob-storage-part-8-blob-leases/

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

说了这么多,为什么你害怕Scheduler依赖?让它启动单个作业,该作业将排队发送"start work"消息。让实例监视该队列。无论谁接收该消息,都可以遍历您的所有存储帐户,并将单个存储工作消息排队供所有实例接收。

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

最新更新