2013-08-22 44 views
0

关于StackOverflow上的this question/answer的构建,我期望让单个Azure实例一次运行某些代码,而不是让每个实例运行代码。确定其他角色实例是否正在忙碌和/或正在恢复?

但是,我似乎无法找到的是如何确定仍在RoleEnvironment.CurrentRoleInstance.Role.Instances中的角色是否忙碌和/或愈合。如果一个失败,我需要这个将控制权移交给另一个实例。

RoleInstance似乎没有任何属性来确定当前的角色状态。

回答

1

可能我建议采取不同的措施,而不是使用基于复杂拓扑的选择,而是实施一个简单的“交通警察”模式。简而言之,它使用临时blob租约来确保只有一个实例(获取锁的实例)可以执行单例操作。如果执行操作的实例变得无响应,则租约将无法续订,而另一个实例可能会快速接管处理。

我有一些示例代码和对我的博客写了起来:http://brentdacodemonkey.wordpress.com/2012/07/27/the-traffic-cop-pattern/

+0

smarx实际上有一个库可以做到这一点。但是,我担心Azure存储失败时会发生什么,就像过去一样。 –

+0

已经存在多个对存储的依赖关系,所以有什么额外的。最糟糕的情况是,在这种模式下,行为根本不会执行,因为没有任何实例可以建立租约。 – BrentDaCodeMonkey

+0

我的应用程序中没有任何对存储的依赖。 –

0

您是否尝试过服务总线为基础的方法?把任务完成成一个主题。该实例可以创建基于实例编号命名的预订。 (你可以从RoleEnvironment.CurrentInstance.Id中获得)。通过这种方式,即使实例出现故障,消息仍然会传递给订阅,以便实例在恢复后进行抢占。

订阅也可以是基于邮件数据的过滤订阅。

无论哪种方式,一个简单的排队机制可能更符合语义与您正在尝试做什么。

+0

I需要该服务高度可用。 –

相关问题