我有1个网络角色。我在启动时运行初始化代码。现在我想拥有N个实例,但我只希望其中一个运行初始化代码而其他所有实例都要等待。
在我看来像主节点 - 从节点。
我怎样才能做到这一点?这有什么已知的模式吗?
答案 0 :(得分:1)
让所有实例在执行某项工作时等待的简单方法是让主实例放置lease on a blob in Azure storage。 启动时,主实例的WorkerRole.cs会在某个Azure容器中创建一个Blob文件,并在其上进行租约。完成初始化后释放租约。 从属实例尝试在启动期间读取同一文件,并等待租约释放。如果它被释放,blob文件应包含某种初始化完成的指示
您是否知道您希望哪个云角色实例成为主人?它是第一个启动的,还是第一个按字母顺序排列的? 如果它是第一个启动的,问题就更简单了 - 因为每个实例都应该尝试创建/租用文件,除了一个之外的所有文件都会失败。
如果它是第一个按字母顺序排列的那个,那么检查RoleEnvironment.Instance.Id(从内存开始)并让它启动启动代码,如果它是" RoleName_IN_1"仅
由于实例可以任意重启,请确保它们不会尝试重新初始化 - 您需要考虑如何最好地处理它 - 可能是通过在blob文件中加入某种时间戳。
答案 1 :(得分:0)
我认为很久以前Alexandre Brisebois解决了这个问题。
通过结合他的两个班级Blob lease manager和Job Reservation Service,他在两篇博客文章中对此进行了解释:
我知道链接答案在SO上不是首选,但是粘贴所有需要的编码并在此处解释它也不是一个好主意。