我正在尝试在Azure数据表中初始化我的数据,但我只希望在启动时在服务器上执行此操作(即通过WebRole Role Entry OnStart例程)。问题是如果我有多个实例同时启动,那么其中一个实例可能会同时向同一个表添加记录,从而在运行时复制数据。
是否存在所有实例的总体例程?一个应用程序对象,我可以在其中将值移入并在每个实例中检查它以查看是否已创建表?天蓝色暴露的某种单身?
干杯 罗布
答案 0 :(得分:4)
不,但您可以使用Blob lease作为互斥锁。如果您正在使用SQL Azure,也可以使用表锁。
答案 1 :(得分:1)
您也可以使用队列,并在其中放置一条消息,然后只有一个角色会接收该消息并对其进行处理。
答案 2 :(得分:0)
您可以创建一个新的单实例角色,在角色启动时执行此任务。
答案 3 :(得分:0)
对于这一点真的很偏执,并在写入数据的过程中解决失败事件,你可以做一些更复杂的事情。
只要您正在进行的工作可以是幂等的,队列消息就是确保事务功能的好方法。
每个实例轮询队列并收到消息
从表格中读取锁定行。
如果'创建数据状态'值为'无人认领'
尝试根据创建数据所需的时间更新具有“进程中”值和超时到期时间戳的行。
如果更新成功,则实例拥有创建数据的任务
否则,如果更新失败,则实例不拥有任务
否则,如果“创建数据”值为“正在处理中”,请检查当前时间是否超过到期时间戳。
否则,如果'创建数据'值为'已提交'