如何自动启动Azure队列?

时间:2009-10-21 16:43:41

标签: azure azure-queues

我想构建一个具有两个辅助角色且没有Web角色的Azure应用程序。当工作者角色首次启动时,我只希望其中一个角色一次完成以下任务:

  • 下载并解析主文件,然后将多个“子”任务排入队列 主文件的内容
  • 将单个主文件下载“子”任务排入第二天运行

然后,每个“子”任务都由两个工作人员完成,直到任务队列耗尽为止。把整个事情想象成“启动泵”

如果我通过调用Web角色在队列中手动添加第一个“主”任务,但这种事情非常简单,但在自动启动模式下似乎很难做到。

在这方面的任何帮助将不胜感激!

感谢.....

2 个答案:

答案 0 :(得分:2)

一种可能性:只需直接加载队列,而不是调用Web角色。 (听起来这是你想要自动启动以完成一些工作然后再次关闭的那种应用程序......如果你自动执行,那么自动加载队列应该是微不足道的。)< / p>

一个(也许)更好的选择:使用某种锁定机制来确保只有一个工作者实例进行初始化工作。一种方法是尝试创建队列(或blob,或表中的实体)。如果它已经存在,那么另一个实例正在处理初始化。如果创建成功,那么这是该实例的工作。

请注意,使用租约而不是锁定总是更好,以防正在进行初始化的实例失败。考虑使用超时(例如,在表存储中或在blob的元数据中或在队列名称中存储时间戳...)。

答案 1 :(得分:2)

我们最终遇到了完全相同的问题,这就是我们引入O/C mapper(云对象)的原因。基本上,您想要引入两种类型的云服务:

  1. QueueService,只要可用就会使用消息。
  2. ScheduledService,按计划触发操作。
  3. 然后,正如其他人所说,在云端,你真的更喜欢使用租约而不是锁,以避免由于临时硬件(或基础设施)导致云应用程序永远冻结)问题。