Windows Azure运行一次例程

时间:2012-02-13 02:29:11

标签: windows azure

我正在尝试在Azure数据表中初始化我的数据,但我只希望在启动时在服务器上执行此操作(即通过WebRole Role Entry OnStart例程)。问题是如果我有多个实例同时启动,那么其中一个实例可能会同时向同一个表添加记录,从而在运行时复制数据。

是否存在所有实例的总体例程?一个应用程序对象,我可以在其中将值移入并在每个实例中检查它以查看是否已创建表?天蓝色暴露的某种单身?

干杯 罗布

4 个答案:

答案 0 :(得分:4)

不,但您可以使用Blob lease作为互斥锁。如果您正在使用SQL Azure,也可以使用表锁。

答案 1 :(得分:1)

您也可以使用队列,并在其中放置一条消息,然后只有一个角色会接收该消息并对其进行处理。

答案 2 :(得分:0)

您可以创建一个新的单实例角色,在角色启动时执行此任务。

答案 3 :(得分:0)

对于这一点真的很偏执,并在写入数据的过程中解决失败事件,你可以做一些更复杂的事情。

只要您正在进行的工作可以是幂等的,队列消息就是确保事务功能的好方法。

  • 每个实例都会向队列添加一条消息。
  • 每个实例轮询队列并收到消息

    • 从表格中读取锁定行。

      • 如果'创建数据状态'值为'无人认领'

        • 尝试根据创建数据所需的时间更新具有“进程中”值和超时到期时间戳的行。

        • 如果更新成功,则实例拥有创建数据的任务

          • 所以创建数据
          • 将“创建数据状态”更新为“已提交”
          • 删除邮件
        • 否则,如果更新失败,则实例不拥有任务

          • 所以只需删除该消息。
      • 否则,如果“创建数据”值为“正在处理中”,请检查当前时间是否超过到期时间戳。

        • 这意味着'进行中'失败
        • 因此,请再次尝试将状态设置为“进行中”,删除不完整的写入行
        • 尝试重新创建数据,更新状态并删除消息
      • 否则,如果'创建数据'值为'已提交'

        • 只需删除队列消息,因为工作已经完成