2

我想构建一个 Azure 应用程序,它有两个辅助角色并且没有 Web 角色。当工作角色第一次启动时,我只希望其中一个角色一次执行以下操作:

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

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

如果我通过调用网络角色在队列中手动添加第一个“主”任务,这种事情真的很容易,但在自动启动模式下似乎真的很难做到。

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

谢谢.....

4

2 回答 2

2

一种可能性:直接加载队列,而不是调用 Web 角色。(听起来这是您想要自动启动以执行某些工作然后再次关闭的那种应用程序……如果您要自动执行此操作,那么自动加载队列也应该是微不足道的。)

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

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

于 2009-10-21T17:21:20.883 回答
2

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

  1. QueueService 在可用时使用消息。
  2. ScheduledService 按计划触发操作。

然后,正如其他人所建议的那样,在云中,您真的更喜欢使用租约而不是锁,以避免您的云应用程序由于临时硬件(或基础设施)问题而最终永远冻结。

于 2009-10-30T10:47:30.367 回答